You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python RotatingFileHandler的maxBytes参数为何失效?如何限制日志大小?

问题分析与解决方案

你遇到的问题核心是RotatingFileHandler的参数传递顺序错误,导致maxBytes参数没有被正确设置,所以日志文件不会按预期限制大小。

为什么会出现这个问题?

看一下RotatingFileHandler的构造函数签名:

RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False, errors=None)

你写的代码里:

handler = RotatingFileHandler(file_name, 'a+', MAX_LOG_SIZE)

这里第三个参数MAX_LOG_SIZE被错误赋值给了backupCount(第三个位置参数),而maxBytes使用了默认值0——这个值表示不限制日志文件大小,所以你的日志会一直写入同一个文件,不会触发轮转。

另外,'a+'模式其实没必要,RotatingFileHandler默认的'a'(追加模式)就足够满足需求。

修正后的代码

我们可以调整参数顺序,更稳妥的方式是使用关键字参数(彻底避免顺序搞错),同时建议设置backupCount来保留历史备份文件:

from logging import getLogger, Formatter
from logging.handlers import RotatingFileHandler

MAX_LOG_SIZE = 2000  # 单个日志文件最大字节数
BACKUP_COUNT = 5     # 最多保留5个备份日志文件
LOG_FORMAT = '%(process)d [%(name)s %(asctime)s] %(levelname)s: %(message)s'

class Logger(object):
    __slots__ = '_Logger__logger'
    
    def __init__(self, name='main'):
        self.__logger = getLogger(name)
        if not self.__logger.handlers:
            self.add_handler(name)
    
    def add_handler(self, name):
        file_name = 'log.log'
        # 使用关键字参数明确指定各参数,避免顺序错误
        handler = RotatingFileHandler(
            filename=file_name,
            mode='a',
            maxBytes=MAX_LOG_SIZE,
            backupCount=BACKUP_COUNT
        )
        handler.setFormatter(Formatter(LOG_FORMAT))
        self.__logger.addHandler(handler)
        self.__logger._file_name = file_name
    
    def ERROR(self, msg, *args):
        self.__logger.error(msg, *args, **{})

if __name__ == '__main__':
    logger = Logger()
    for i in range(1000):
        logger.ERROR('logger.content')

额外说明

  • backupCount设置为5意味着当log.log达到2000字节时,会被重命名为log.log.1,然后新建一个空的log.log继续写入;当新的log.log又达到大小限制时,log.log.1会变成log.log.2,以此类推,最多保留5个备份文件。
  • 如果不需要备份文件,可以把backupCount设为0,但此时达到大小限制后会直接覆盖原文件(不推荐,容易丢失历史日志)。
  • 你的Logger类中检查if not self.__logger.handlers:的逻辑是正确的,避免了重复添加Handler导致日志重复输出的问题。

内容的提问来源于stack exchange,提问作者Begin AC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:09:41