使用logging包滚动记录日志

Python日志管理最佳实践
基础配置说明
logging模块是Python的内置日志系统,提供了灵活的日志记录功能。本文重点介绍如何使用TimedRotatingFileHandler实现日志文件的自动轮转。
关键特性
- 支持按时间轮转日志文件
- 自定义日志格式
- 控制日志文件保留数量
- 灵活的日志级别管理
代码实现
1. 基本配置示例
import logging
from logging.handlers import TimedRotatingFileHandler
from logging.handlers import RotatingFileHandler
# 定义日志格式
log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
formatter = logging.Formatter(log_fmt)
# 创建TimedRotatingFileHandler对象
log_file_handler = TimedRotatingFileHandler(
filename="logs/app.log", # 日志文件路径
when="D", # 按天轮转
interval=1, # 每天轮转一次
backupCount=30 # 保留30天的日志文件
)
# 设置日志格式
log_file_handler.setFormatter(formatter)
# 配置根日志记录器
logging.basicConfig(level=logging.INFO)
log = logging.getLogger()
log.addHandler(log_file_handler)
# 使用示例
log.info("read config.ini")
2. 高级配置选项
可以通过以下方式自定义日志文件名格式:
# 自定义日志文件后缀格式
log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
# 使用正则表达式匹配日志文件
import re
log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
使用建议
- 根据应用需求选择合适的轮转策略
- 合理设置日志级别,避免日志文件过大
- 定期清理过期日志文件
- 确保日志目录具有适当的写入权限
常见问题解决
- 日志文件权限问题:确保应用有写入权限
- 日志轮转不生效:检查时间设置和文件命名
- 日志格式错误:验证formatter配置