diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2010-08-30 19:02:14 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2010-08-30 19:02:14 (GMT) |
commit | ec1cd1c475718418575cfaf13d5b032a4f48d31b (patch) | |
tree | f846f48acfab6c58bee032691029560d5ad42f4f /Lib | |
parent | 609364a9898ef63e26be191cb092f0d37ab95340 (diff) | |
download | cpython-ec1cd1c475718418575cfaf13d5b032a4f48d31b.zip cpython-ec1cd1c475718418575cfaf13d5b032a4f48d31b.tar.gz cpython-ec1cd1c475718418575cfaf13d5b032a4f48d31b.tar.bz2 |
logging: merged duplicated code in fileConfig and dictConfig paths.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/logging/config.py | 58 |
1 files changed, 40 insertions, 18 deletions
diff --git a/Lib/logging/config.py b/Lib/logging/config.py index c90591b..cc75e94 100644 --- a/Lib/logging/config.py +++ b/Lib/logging/config.py @@ -172,8 +172,28 @@ def _install_handlers(cp, formatters): h.setTarget(handlers[t]) return handlers +def _handle_existing_loggers(existing, child_loggers, disable_existing): + """ + When (re)configuring logging, handle loggers which were in the previous + configuration but are not in the new configuration. There's no point + deleting them as other threads may continue to hold references to them; + and by disabling them, you stop them doing any logging. + + However, don't disable children of named loggers, as that's probably not + what was intended by the user. Also, allow existing loggers to NOT be + disabled if disable_existing is false. + """ + root = logging.root + for log in existing: + logger = root.manager.loggerDict[log] + if log in child_loggers: + logger.level = logging.NOTSET + logger.handlers = [] + logger.propagate = True + elif disable_existing: + logger.disabled = True -def _install_loggers(cp, handlers, disable_existing_loggers): +def _install_loggers(cp, handlers, disable_existing): """Create and install loggers""" # configure the root first @@ -254,15 +274,15 @@ def _install_loggers(cp, handlers, disable_existing_loggers): #and by disabling them, you stop them doing any logging. #However, don't disable children of named loggers, as that's #probably not what was intended by the user. - for log in existing: - logger = root.manager.loggerDict[log] - if log in child_loggers: - logger.level = logging.NOTSET - logger.handlers = [] - logger.propagate = 1 - elif disable_existing_loggers: - logger.disabled = 1 - + #for log in existing: + # logger = root.manager.loggerDict[log] + # if log in child_loggers: + # logger.level = logging.NOTSET + # logger.handlers = [] + # logger.propagate = 1 + # elif disable_existing_loggers: + # logger.disabled = 1 + _handle_existing_loggers(existing, child_loggers, disable_existing) IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) @@ -617,14 +637,16 @@ class DictConfigurator(BaseConfigurator): #and by disabling them, you stop them doing any logging. #However, don't disable children of named loggers, as that's #probably not what was intended by the user. - for log in existing: - logger = root.manager.loggerDict[log] - if log in child_loggers: - logger.level = logging.NOTSET - logger.handlers = [] - logger.propagate = True - elif disable_existing: - logger.disabled = True + #for log in existing: + # logger = root.manager.loggerDict[log] + # if log in child_loggers: + # logger.level = logging.NOTSET + # logger.handlers = [] + # logger.propagate = True + # elif disable_existing: + # logger.disabled = True + _handle_existing_loggers(existing, child_loggers, + disable_existing) # And finally, do the root logger root = config.get('root', None) |