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

Python日志超出指定大小时如何自动拆分多文件且不删除旧日志?

按大小无上限拆分日志实现方案

Python标准库logging模块自带的RotatingFileHandler默认会在备份日志数量达到backupCount设定值时删除最早的旧日志,无法满足不删除旧日志、无上限拆分的需求。

自定义Handler实现无上限拆分

直接重写RotatingFileHandler的滚动逻辑,去掉删除旧日志的步骤,让备份文件序号持续递增即可,代码实现如下:

import os
from logging.handlers import RotatingFileHandler

class UnlimitedSizeRotatingHandler(RotatingFileHandler):
    def doRollover(self):
        if self.stream:
            self.stream.close()
            self.stream = None
        # 遍历目录找到当前最大的备份序号
        max_index = 0
        base_filename = os.path.basename(self.baseFilename)
        dir_path = os.path.dirname(self.baseFilename) or '.'
        for filename in os.listdir(dir_path):
            if filename.startswith(f"{base_filename}."):
                try:
                    idx = int(filename.split('.')[-1])
                    if idx > max_index:
                        max_index = idx
                except ValueError:
                    continue
        # 生成新的备份文件
        new_backup_name = f"{self.baseFilename}.{max_index + 1}"
        if os.path.exists(self.baseFilename):
            os.rename(self.baseFilename, new_backup_name)
        # 打开新的当前日志文件
        if not self.delay:
            self.stream = self._open()

使用示例

直接替换你原来的RotatingFileHandler即可,不需要调整其他业务逻辑:

# 单个日志文件大小10MB,无上限保留所有历史日志
my_handler = UnlimitedSizeRotatingHandler(
    log_filename, 
    mode='a', 
    maxBytes=1024*1024*10, 
    # backupCount参数无需生效,设为0即可
    backupCount=0, 
    encoding='utf-8', 
    delay=0
)

方案说明

  • 日志拆分后命名格式为xxx.log.1、xxx.log.2、xxx.log.3...序号持续递增,不会自动删除任何旧日志
  • 完全兼容原生RotatingFileHandler的所有其他配置,原有日志写入、格式化逻辑不需要做任何修改
  • 若你的场景日志拆分量级会达到数十万份,可以额外新增变量缓存当前最大序号,避免每次滚动时遍历目录,进一步提升性能
  • 临时场景不想自定义类的话,也可以直接把原生RotatingFileHandler的backupCount设为极大值(比如10000),按10MB单文件计算可支持最高100GB的总日志存储,足够覆盖大多数普通使用场景,本质仍有上限但改造成本最低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:06:03