如何在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
相关产品推荐
相关产品推荐

