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

如何在Python中生成按指定大小分割的连续全量日志文件?

问题:生成按大小分割的多份日志文件

我编写了一个将运行一整天的程序,希望以易管理的方式捕获所有日志输出。具体来说,我希望程序接收一个最大文件大小作为配置参数,通过日志处理器捕获所有日志,确保程序结束后输出的不是单个日志文件,而是一组顺序命名的日志文件,每个文件大小不超过指定参数。

能否通过指定日志处理器实现该需求?我了解到Handler对象负责根据日志消息的级别将合适的日志消息分发到指定目标。

现有研究

  • 找到的资料多是拆分已有的大文件,但我需要直接生成多份文件,而非事后拆分。
  • 查阅Python官方logging指南后,未找到控制顺序输出文件最大大小的具体示例。
  • 查看了RotatingFileHandler等处理器,它可控制每次轮转的最大文件大小,但不符合我的需求。
  • 查看官方logging cookbook中文件轮转相关内容,输出形式接近需求,但我不需要轮转功能。

我认为继承FileHandler类实现自定义行为是可行方案,因为我的程序包含多个模块,需要捕获所有模块的日志。

期望行为伪代码

以下伪代码可说明我的需求:

file_name = "output.{id}.log"
max_log_file_size_byte = 26214400  # 25 MB
file_number = 0
logging.basicConfig(filename=file_name.format(id=str(file_number)),
                    encoding='utf-8',
                    format='%(asctime)s - %(levelname)s - %(message)s',
                    level=logging.DEBUG)
while True:
    # 获取当前日志文件的字节大小
    current_file_size = 获取文件大小(file_name.format(id=str(file_number)))
    if current_file_size > max_log_file_size_byte:
        file_number += 1
        logging.basicConfig(filename=file_name.format(id=str(file_number)),
                            encoding='utf-8',
                            format='%(asctime)s - %(levelname)s - %(message)s',
                            level=logging.DEBUG)
    App.Function1WhichNeedsToLog()
    App.Function2WhichNeedsToLog()

内容的提问来源于stack exchange,提问作者Eduardo J. Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:52:46