1. 为什么需要日志轮转?
日志文件就像程序运行的"黑匣子",记录着系统运行的每一个关键时刻。但如果不加控制,这个黑匣子会无限膨胀——我曾见过一个生产系统因为未配置日志轮转,导致单个日志文件占满整个磁盘分区,最终引发服务崩溃。
Python自带的logging.handlers模块提供了完整的日志轮转解决方案。与直接使用第三方库相比,它有三大优势:
- 零依赖:无需安装额外包,开箱即用
- 高性能:基于C实现的RotatingFileHandler处理大文件效率极高
- 可定制:支持按大小、时间等多种轮转策略
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心组件解析
2.1 RotatingFileHandler 工作原理解析
这个处理器的核心机制可以用"水杯换水"来类比:
- 设定杯子容量(maxBytes):比如10MB
- 当水(日志)装满杯子时:
- 将当前杯子重命名为.log.1
- 新日志继续写入空杯子
- 如果已存在.log.1,则将其重命名为.log.2,依此类推
关键参数说明:
python复制RotatingFileHandler(
filename='app.log',
maxBytes=10*1024*1024, # 10MB
backupCount=5, # 最多保留5个备份
encoding='utf-8'
)
2.2 TimedRotatingFileHandler 的妙用
当需要按时间轮转时,这个处理器就是最佳选择。它的时间单位非常灵活:
| 参数值 | 含义 | 典型场景 |
|---|---|---|
| 'S' | 秒级轮转 | 高频调试 |
| 'M' | 分钟级轮转 | 临时测试 |
| 'H' | 小时级轮转 | 生产环境常规日志 |
| 'D' | 天级轮转 | 审计日志 |
| 'W0' | 每周一轮转 | 周报统计 |
