Fix logcapture plugin to capture output from non-propagating loggers,… #948
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
… and to not output 'no handlers could be found' message.
Found this when activating log capturing on my project's test suite, we would end up with a single message in the test output such as
No handlers could be found for logger "foo.yes"
for a logger that haspropagate = False
. This is because the logcapture plugin would clear the handlers and not replace them.logging
emits this message once per program: https://hg.python.org/cpython/file/2.7/Lib/logging/__init__.py#l1339To fix this, I install the memory handler for every non-propagating logger (have to take care to find only legitimate loggers with
propagate = False
and not e.g.Placeholder
objects). This not only stops the message from appearing but also captures their output which may help further with debugging.