记录处理程序为空 - 为什么记录 TimeRoatingFileHandler 不起作用

Ori*_*che 4 python windows logging logrotate log-rotation

所以我做 logging.config.fileConfig 以从具有控制台和文件处理程序的文件配置设置我的日志记录。然后我做 logging.getLogger(name) 来获取我的记录器和日志。在某些时候,我希望文件处理程序的文件名更改,即日志轮换(由于 Windows 平台的某些问题,我无法使用时间轮换器),因此我调用 logger.handlers - 它显示一个空列表,所以我无法关闭它们!! 但是,当我单步调试调试器时,它显然不是空的(当然没有它我将无法正确登录)

不确定这里发生了什么,我遗漏了什么问题?

感谢任何帮助。谢谢。

Tjo*_*rie 5

看来您需要正确获取根记录器:

logger = logging.getLogger(__name__)
handlers = logger.handlers[:]
print('module {}'.format(handlers))
print('module {}'.format(logger.hasHandlers()))

logger = logging.getLogger('root')
handlers = logger.handlers[:]
print('root {}'.format(handlers))
print('root {}'.format(logger.hasHandlers()))

logger = logging.getLogger()
handlers = logger.handlers[:]
print('blank {}'.format(handlers))
print('blank {}'.format(logger.hasHandlers()))
Run Code Online (Sandbox Code Playgroud)

输出:

模块 []

模块真

根 []

根真

空白的 [<logging.handlers.RotatingFileHandler object at 0x108d82898>, <logging.StreamHandler object at 0x108d826d8>]

空白 真


fal*_*tru 0

您可以使用RotatingFileHandler(而不是TimedRotatingFileHandler)。

调用doRollover处理程序将轮换日志文件。