我可以在使用 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
当使用 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