首页 > 解决方案 > Python RotatingFileHandler 似乎没有旋转日志

问题描述

我已经使用以下代码设置了一个记录器:

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)

由于日志文件很大,我想创建一个循环日志文件。因此,我做了以下更改:

# logFile = logging.FileHandler(logfilename)
logFile = RotatingFileHandler(logfilename, maxBytes=1024)  # maxBytes=1024 only for testing

但是,生成的日志文件不会轮换。我仍然得到几 MB 大的日志。我已经清除了所有.pyc文件。

问题:

  1. 是否有必要指定备份计数(我需要保留所有日志!因此,如果这是强制性的,我必须给出一些非常大的数字)。
  2. 我假设它是实际字节(因此在maxBytes我的情况下,日志应该每 1 kB 旋转一次),仅此而已。我对么?
  3. 是否有一个最小数量,maxBytes低于哪个轮换无效?(我想不会)

我使用 Python 2.7.14 (Anaconda) 和 3.6.4 (Anaconda)。

标签: pythonlogging

解决方案


文档

如果 maxBytes 或 backupCount 中的任何一个为零,则永远不会发生翻转,因此您通常希望将 backupCount 设置为至少 1,并且 maxBytes 不为零。

这意味着如果没有设置backupCount(默认值为 0),您将不会获得任何翻转功能

我需要保留所有日志!因此,如果这是强制性的,我必须给出一些非常大的数字

是的!设置一些非常大的数字,并且可能每隔一段时间添加另一个脚本来备份旧文件


推荐阅读