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

Python logging如何自动保留最近N个日志文件?是否需自行实现?

Python Logging 保留最近N个日志文件的实现方法

不用自己写删除旧文件的函数,Python的logging模块已经内置了现成的处理器可以直接实现这个需求,替代你当前用的basicConfig配置即可。

两种常用实现方式

1. 按文件大小轮转(保留最近10个文件)

使用RotatingFileHandler,当单个日志文件达到指定大小后,自动生成新文件,同时保留设置数量的旧文件,超出数量时自动删除最旧的那个。

示例代码:

import logging
from logging.handlers import RotatingFileHandler

# 创建logger实例
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# 避免重复添加handler导致日志重复输出
if not logger.handlers:
    # 配置轮转文件处理器
    handler = RotatingFileHandler(
        filename="logs/log.log",  # 基础日志文件名
        maxBytes=1024 * 1024,  # 单个日志文件最大1MB(可根据需求调整)
        backupCount=10,  # 保留10个备份文件,加上当前文件共11个;若要总文件数为10,设为9
        encoding="utf-8",
        delay=False
    )

    # 设置日志格式
    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-8s %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S"
    )
    handler.setFormatter(formatter)

    # 将处理器绑定到logger
    logger.addHandler(handler)

2. 按时间轮转(保留最近10个文件)

如果需要按时间周期(比如每天、每小时)生成新日志文件,用TimedRotatingFileHandler,同样通过backupCount控制保留的文件数量。

示例代码:

import logging
from logging.handlers import TimedRotatingFileHandler

# 创建logger实例
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

if not logger.handlers:
    # 按天轮转的处理器配置
    handler = TimedRotatingFileHandler(
        filename="logs/log.log",
        when="D",  # 轮转周期:D=天,H=小时,M=分钟,S=秒,midnight=午夜
        interval=1,  # 间隔1个周期(这里是1天生成一个新文件)
        backupCount=10,  # 保留最近10个日志文件
        encoding="utf-8",
        delay=False
    )

    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-8s %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S"
    )
    handler.setFormatter(formatter)
    logger.addHandler(handler)

关键说明

  • 这两个处理器默认使用追加模式(filemode="a"),不会像你原来的basicConfig那样每次覆盖文件,符合日志记录的常规需求。
  • backupCount参数指定的是备份文件的数量,加上当前正在写入的文件,总文件数是backupCount + 1;如果需要严格保留10个文件,把backupCount设为9即可。
  • 多模块使用时,用logging.getLogger(__name__)创建logger实例,并通过if not logger.handlers:判断避免重复添加处理器,防止日志重复输出。

内容的提问来源于stack exchange,提问作者Abel Gutiérrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:37:39