限制Python日志记录中的日志文件大小



据我所知,可以使用RotatingFileHandler及其属性maxBytes来限制python中的日志文件大小。

为了测试这一点,我编写了以下脚本:

import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger("Rotating Log")
logger.setLevel(logging.INFO)
# add a rotating handler
handler = RotatingFileHandler("test.log", maxBytes=1)
logger.addHandler(handler)
x = 0
while True:
x += 1
logger.info(x)

即使日志文件不应该超过1个字节,它也会很快上升到许多兆字节。我该如何限制?遗憾的是,文档非常糟糕。我还想知道如何确保每次重新运行python脚本时,日志文件都会被清除并重新启动,然而,在docu中,它只显示

class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
If mode is not specified, 'a' is used. 

然而,它没有说明除了"a"之外还有什么其他选择。

总结问题

  1. 如何将日志文件大小限制为10兆字节
  2. 如果运行脚本,如何确保启动新的日志文件,而不是附加旧的日志文件

Edit:我尝试了maxBytes=1000000,但结果保持不变。日志文件的越来越大

您可以检查RotatingFileHandler类的第二部分

只要当前日志文件的长度接近maxBytes,就会发生滚动,但如果maxBytes或backupCount为零,则不会发生滚动,因此您通常希望将backupCount设置为至少1,并具有非零的maxBytes

看起来您没有设置backupCount值。

当backupCount为非零时,系统将通过将扩展名".1"、".2"等附加到文件名来保存旧的日志文件

例如,如果备份计数为5,基本文件名为app.log,则会得到app.log、app.log 1、app.log 2,最多可达app.log 5。要写入的文件总是app.log。

当填充此文件时,它将被关闭并重命名为app.log 1,如果存在app.log 1、app.log 2等文件,则它们将分别重命名为app.log.2、app.log 3等。

最新更新