我可以在使用 Twisted 记录器时延迟日志文件的轮换吗?

Can I delay the rotation of the logfile when using the Twisted logger?

当使用 logging 模块创建轮转日志文件时,我可以通过使用 delay=True 参数告诉记录器延迟轮转,直到有实际数据要记录为止13=] class 像这样:

import time
import logging
from logging.handlers import TimedRotatingFileHandler

if __name__ == '__main__':
    handler = TimedRotatingFileHandler('logfile.log', when='midnight', delay=True)
    out_fmt = '[%(asctime)s.%(msecs)03dZ] [%(levelname)s] %(message)s'
    dt_fmt = '%Y-%m-%d %H:%M:%S'
    logging.Formatter.converter = time.gmtime
    formatter = logging.Formatter(out_fmt, dt_fmt)
    handler.setFormatter(formatter)
    root = logging.getLogger()
    root.setLevel(logging.DEBUG)
    root.addHandler(handler)

这在很少有新信息输出到日志时很有用——例如,如果一整天都没有记录任何新信息;那么您不想为那天创建一个空的日志文件。

使用Twisted logger(twisted.python.logfile.DailyLogFile)是否可以达到同样的效果?

您只需覆盖 DailyLogFile class.

中的 shouldRotate 函数即可实现您想要的行为

像下面这样的东西应该可以解决问题:

class CustomDailyLogFile(LogFile, DailyLogFile):
    def shouldRotate(self):
        return self.toDate() > self.lastDate and self.rotateLength and self.size >= self.rotateLength