所以我做logging.config.fileConfig从具有控制台和文件处理程序的文件配置中设置我的日志记录。然后我做logging.getLogger(name)来获取我的记录器和日志。在某些时候,我希望文件处理程序的文件名更改即日志旋转(由于Windows平台的一些问题,我不能使用时间旋转器)所以要做到这一点我调用logger.handlers - 它显示一个空列表,所以我不能关闭他们!然而,当我单步执行调试器时,它显然不是空的(当然没有它,我就不能正确记录)
不确定这里发生了什么,我遗失的任何陷阱?
感谢任何帮助。感谢。
答案 0 :(得分:1)
首先问题是,如果您使用配置文件初始化使用文件和控制台处理程序的日志记录,那么它不会填充logging.handlers列表,因此您无法迭代它并在打开之前关闭+刷新流新的日志文件名。
如果你想使用TimeRotatingFileHandler或RotatingFileHandler,它就位于logging / handler.py下,当它尝试进行翻转时,它只会关闭自己的流,因为它不知道父日志的流是什么(主要是单例)班级可能已开放。所以当你进行翻转时,会有一个文件锁(文件文件处理程序)并且它都会失败。
所以解决方案(对我来说)是以编程方式初始化日志记录并在日志记录中使用addHandlers,它还会填充logging.handlers [],然后我用它来迭代我的控制台/文件处理程序并在手动旋转之前关闭它们文件。
对我来说,这看起来像是一个明显的日志类错误,如果它在unix上工作 - 它真的不应该。
谢谢大家,特别是@falsetru的帮助。
答案 1 :(得分:0)
您可以使用RotatingFileHandler
(不是TimedRotatingFileHandler
)。
调用处理程序的doRollover
将旋转日志文件。
答案 2 :(得分:0)
也许没有“ TimeRoatingFileHandler”这样的名称,因为您错过了“ Timed”一词中的“ d”。因此它必须是:'TimedRoatingFileHandler'