Python日志轮转怎么做_日志文件管理实践

5次阅读

python日志轮转主要通过rotatingfilehandler(按大小)和timedrotatingfilehandler(按时间)实现,分别适用于高频写入和按周期归档场景;需注意编码、权限及多进程安全问题,并推荐按天归档+控制台输出的组合配置。

Python日志轮转怎么做_日志文件管理实践

Python日志轮转主要靠 Logging.handlers.RotatingFileHandlerTimedRotatingFileHandler 实现,核心是自动归档旧日志、控制文件数量和大小,避免磁盘被撑爆。

按大小轮转:RotatingFileHandler

适合日志写入频率高、单次运行时间不固定的场景。当日志文件达到指定大小,就重命名旧文件(如 app.log.1app.log.2),新建空文件继续写。

  • maxBytes:单个日志文件最大字节数,比如 10 * 1024 * 1024(10MB)
  • backupCount:最多保留几个历史备份文件,超出的自动删除
  • 注意:轮转发生在下一次 logger.info() 等写入时触发,不是实时检测

按时间轮转:TimedRotatingFileHandler

适合需要按天/小时归档、便于按时间排查问题的场景。支持 when='D'(每天)、'H'(每小时)、'midnight'(零点)等策略。

  • wheninterval 共同决定轮转周期,例如 when='D', interval=1 表示每天轮转一次
  • backupCount 同样控制保留多少个历史文件,比如保留最近7天的 app.log.2024-05-01
  • 默认用 %Y-%m-%d_%H-%M-%S 格式命名归档文件,可通过 suffix 自定义,如 suffix='%Y-%m-%d'

避免常见坑:编码、权限与多进程

实际部署中容易出问题的地方:

立即学习Python免费学习笔记(深入)”;

  • windows 下中文路径或日志内容含中文,需显式指定 encoding='utf-8'
  • linux 上若用 systemd 或 supervisord 启动,确保运行用户对日志目录有写权限
  • 多个 Python 进程同时写同一日志文件?不要共用同一个 RotatingFileHandler —— 轮转逻辑非原子操作,会导致丢失或错乱;应改用日志服务器(如 syslog)或进程间协调方案

推荐配置模板(带格式+轮转+控制台输出)

一个开箱即用的实用组合:

  • 主日志用 TimedRotatingFileHandler 按天归档,保留30天
  • 同时加一个 StreamHandler 输出到终端,方便开发调试
  • 统一使用 %(asctime)s %(levelname)-8s %(name)s %(message)s 格式,时间精确到毫秒
  • 设置 logger.setLevel(logging.INFO),避免 DEBUG 日志刷屏
text=ZqhQzanResources