我用以下代码设置了一个记录器:
log = logging.getLogger('base')
logfilename = <path to logfile>
logFile = logging.FileHandler(logfilename)
log.setLevel(debug)
logFile.setFormatter(logging.Formatter('[%(asctime)s]: [%(filename)s:%(lineno)d:%(funcName)s]: %(levelname)s :: %(message)s', datefmt='%m-%d-%Y %H:%M:%S'))
log.addHandler(logFile)
因为日志文件很大,所以我想创建一个循环日志文件。 因此,我做了以下更改:
^{pr2}$但是,生成的日志文件不会被旋转。我仍然可以得到几兆字节大的日志。我已清除所有.pyc
文件。在
问题:
maxBytes
我假设它是实际的字节(因此在我的例子中,日志应该每1kb旋转一次),而没有其他字节。我说的对吗?在maxBytes
低于该值旋转无效?(我想不是)我使用python2.7.14(Anaconda)和3.6.4(Anaconda)。在
从docs:
这意味着如果不设置
backupCount
(默认值为0),就无法获得任何滚动功能是的!设置一个非常大的数字,并且可能每隔一段时间添加另一个脚本来备份旧文件
您需要设置一个
backupCount
值,或将文件模式从追加更改为打开时截断。在日志文件已关闭,但随后会再次打开以附加,因此您不会真正看到差异。在
现在的情况是:
backupCount
大于零,请旋转所有现有的备份文件,然后重命名日志文件以添加.1
除了将
backupCount
设置为大于0的数字外,还可以将mode
参数改为'w'
,此时文件每次变得太大时都会被截断:请注意,如果新消息本身的长度大于1024个字节,则文件仍可能大于
maxBytes
。在没有选项可以保留所有旋转的文件。你必须使用一个非常高的数字,或使用不同的文件旋转策略。例如,
TimedRotatingFileHandler
在给定的时间间隔后旋转文件,如果您将backupCount
设置为零,它将永远不会删除旋转的备份。在您还可以子类
^{pr2}$RotatingFileHandler()
来实现自己的重命名策略,提供自己的doRollover()
方法。如果要保留所有备份,则需要生成唯一的名称;可以添加一个UUID来确保这一点(连同日期):相关问题 更多 >
编程相关推荐