Skip to content

shutdown function of logging module does not empty _loggers #928

@xlla

Description

@xlla

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions