Odd behavior with imp.reload and logging
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Thu Sep 22 00:22:39 EDT 2011
On Wed, 21 Sep 2011 20:53:04 -0500, Andrew Berg wrote:
> When using a logger in a module and then using imp.reload to reload the
> module, logger messages are repeated in direct proportion to the number
> of times the modules was loaded. That is, on the first import, the
> message is written once, but on the second run, each message is written
> twice, three times on the third run, and so on.
[...]
> What causes this, and how can I fix it (or at least work around it)? Due
> to the nature of the program, it's much more convenient to reload a
> module than to restart the entire program (especially when testing).
You unconditionally add a handler every time you reload the module,
regardless of whether or not the old handler is still there. You could
try something like this (untested):
import logging
test_logger = logging.getLogger(__name__)
if not test_logger.handlers:
console_handler = logging.StreamHandler()
console_formatter = logging.Formatter(
'{asctime} - {module} - {funcName} - line {lineno} - '
'{levelname} - {message}', style='{'
)
console_handler.setFormatter(console_formatter)
test_logger.addHandler(console_handler)
test_logger.setLevel(logging.DEBUG)
test_logger.info('Test info')
--
Steven
More information about the Python-list
mailing list