1. Python日志轮转:为什么需要它?
日志轮转(Log Rotation)是每个Python开发者迟早要面对的基础需求。想象一下你的应用连续运行三个月,日志文件膨胀到50GB的场景——不仅占用磁盘空间,排查问题时打开文件都成问题。这就是日志轮转要解决的核心痛点:控制日志文件体积,同时保留历史记录。
Python标准库中的logging.handlers模块提供了两种主流轮转方案:
- RotatingFileHandler:按文件大小轮转
- TimedRotatingFileHandler:按时间间隔轮转
我在多个生产项目中验证过,这两种Handler的组合使用能覆盖90%的日志管理需求。下面这个真实案例可以说明问题:去年我们有个Django项目突然日志暴涨,单日产生3GB日志,正是靠RotatingFileHandler的maxBytes参数及时止损,同时用TimedRotatingFileHandler保留了按天归档的能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心Handler详解与参数配置
2.1 RotatingFileHandler:大小管控专家
python复制from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler(
filename='app.log',
maxBytes=5*1024*1024, # 5MB
backupCount=7
)
关键参数解析:
- maxBytes:触发轮转的阈值字节数。注意这是精确控制,比如设置为5MB时,日志文件达到5,242,880字节(5×1024×1024)才会触发轮转
- backupCount:保留的历史文件数。设为7时会保留app.log.1到app.log.7,最早的app.log.8会被删除
实测建议:
- 生产环境推荐设置10-50MB的maxBytes
- backupCount需要根据磁盘空间和保留需求平衡
- 重要提示:Windows系统下首次轮转时需要先关闭当前文件句柄,可能造成少量日志丢失
2.2 TimedRotatingFileHandler:时间管理大师
python复制from logging.handlers import TimedRotatingFileHandler
handler = TimedRotatingFileHandler(
filename='app.log',
when='midnight', # 或'H'/'D'/'W0'等
interval=1,
backupCount=14,
encoding='utf-8'
)
时间参数详解:
| when值 | 含义 | 典型应用场景 |
|---|---|---|
| 'S' | 秒 | 高频调试日志 |
| 'M' | 分钟 | 临时测试 |
