-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Description
if I want to reuse logger after call shutdown(), I can recreate log_a , add file_handler , but it will failure on log.xxx
Traceback (most recent call last): ... File "logging.py", line 141, in info File "logging.py", line 135, in log File "logging.py", line 71, in emit ValueError:
the root cause is, after execute logging.shutdown() , all logger remain in _loggers variables, so all handlers remain in logger.handlers, but the old file_handlers was closed, so emit method failure.
we can run follow code to verify it.
import logging log_a = logging.getLogger('a') log_a.setLevel(logging.DEBUG) file_handler = logging.FileHandler('log.txt') file_handler.setLevel(logging.DEBUG) formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s") file_handler.setFormatter(formatter) log_a.addHandler(file_handler) log_a.debug('write to file') print(logging._loggers) print(log_a.handlers) logging.shutdown() log_a = logging.getLogger('a') log_a.setLevel(logging.DEBUG) file_handler = logging.FileHandler('log.txt') file_handler.setLevel(logging.DEBUG) formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s") file_handler.setFormatter(formatter) log_a.addHandler(file_handler) log_a.debug('write to file') print(logging._loggers) print(log_a.handlers)
to fixed it, pass name to pop method in line 213
logging._loggers.pop(logger.name, None)
Metadata
Metadata
Assignees
Labels
No labels