ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> Python教程 >> 实际应用中遇到TimedRotatingFileHandler不滚动的问题

实际应用中遇到TimedRotatingFileHandler不滚动的问题

来源:网络整理     时间:2017-12-07     关键词:

本篇文章主要介绍了" 实际应用中遇到TimedRotatingFileHandler不滚动的问题",主要涉及到方面的内容,对于Python教程感兴趣的同学可以参考一下: 需求:程序每天晚上8点和10点定时运行,期望日志按日期记录添加Handler部分代码如下:formatter = logging.Formatter("%(as...

需求:

程序每天晚上8点和10点定时运行,期望日志按日期记录

添加Handler部分代码如下:

formatter = logging.Formatter("%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s", "%Y-%m-%d %H:%M:%S")
log_file_handler = logging.handlers.TimedRotatingFileHandler(filename="loaddata.log", when="D", interval=1, backupCount=30)
log_file_handler.setFormatter(formatter)
logging.getLogger().addHandler(log_file_handler)

查看过很多资料,代码并没有问题

现象:

只有一个日志(loaddata.log)文件被生成,其中会有所有天的日志,期望的loaddata.log.YYYY-mm-dd并没有看到

研究:

追查代码,看到handlers.py(Python自带模块)中是这样计算日志文件重新生成时间的

 实际应用中遇到TimedRotatingFileHandler不滚动的问题

下面的 result 是下一次rollover的时间,上面的 t 是handler初始化时获取的起始时间。

可以看到logging模块得到的结果是这样的:

  • 起始时间 = 日志文件的最后修改时间
  • 下次滚动时间 = 起始时间 + 1天(因为我设置的when='D')

又因为,我每天要在20点和22点各执行一次,并且每次都有日志写入。因此:

  • 20点执行时,起始时间 = 昨天晚上22点;下次滚动时间 = 昨天22点 + 1天 = 今天22点。所以不滚动
  • 22点执行时,起始时间 = 今天20点;下次滚动时间 = 今天20点 + 1天 = 明天20点。所以不滚动

所以:导致的结果就是。。。永远不滚动!/(ㄒoㄒ)/~~

解决办法:

创建Handler时,把when='D'改成when='MIDNIGHT'可解决这个问题。因为MIDNIGHT指的是,只要过了0点就会滚动。

以上就介绍了 实际应用中遇到TimedRotatingFileHandler不滚动的问题,包括了方面的内容,希望对Python教程有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_4518256.html

相关图片

相关文章