python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python logging.TimedRotatingFileHandler

Python logging.TimedRotatingFileHandler使用方法详解

作者:华丽的周遭

本文主要介绍了Python logging.TimedRotatingFileHandler使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、TimedRotatingFileHandler 是什么?

TimedRotatingFileHandler是 Python logging模块中按时间自动切割日志文件的处理器。

✅ 常用于:

📌 典型场景:

生产环境服务长期运行,日志不能只写在一个文件里。

二、基本使用方式

最简单示例

import logging
from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger("my_logger")
logger.setLevel(logging.INFO)

handler = TimedRotatingFileHandler(
    filename="app.log",
    when="midnight",
    interval=1,
    backupCount=7,
    encoding="utf-8"
)

formatter = logging.Formatter(
    "%(asctime)s - %(levelname)s - %(message)s"
)
handler.setFormatter(formatter)

logger.addHandler(handler)

logger.info("这是第一条日志")

✅ 效果:

三、参数详解(重点)

TimedRotatingFileHandler(
    filename,
    when='h',
    interval=1,
    backupCount=0,
    encoding=None,
    delay=False,
    utc=False
)

1.filename

日志文件名

2.when(最重要)

when

含义

'S'

每秒

'M'

每分钟

'H'

每小时

'D'

每天

'W0' ~ 'W6'

周一~周日

'midnight'

每天凌晨

✅ 常用:

when="D"        # 每天
when="H"        # 每小时
when="midnight" # 午夜切

3.interval

when配合使用

when="H", interval=6   # 每 6 小时
when="M", interval=30  # 每 30 分钟

4.backupCount

保留的历史日志数量

backupCount=7 # 只保留最近 7 个

📁 文件示例:

app.log
app.log.2026-04-20
app.log.2026-04-21

5.encoding

强烈建议设置:

encoding="utf-8"

6.utc

四、日志文件命名规则

假设:

filename="app.log"

时间

文件名

当前

app.log

昨天

app.log.2026-04-26

前天

app.log.2026-04-25

⚠️ 不会自动加日期后缀到当前文件

五、结合 logging.basicConfig 使用

import logging
from logging.handlers import TimedRotatingFileHandler

logging.basicConfig(
    level=logging.INFO,
    handlers=[
        TimedRotatingFileHandler(
            "app.log",
            when="D",
            interval=1,
            backupCount=15,
            encoding="utf-8"
        )
    ],
    format="%(asctime)s - %(levelname)s - %(message)s"
)

logging.info("服务启动")

六、同时输出到控制台 + 文件(推荐)

logger = logging.getLogger()
logger.setLevel(logging.INFO)

# 文件
file_handler = TimedRotatingFileHandler(
    "app.log", when="midnight", backupCount=7, encoding="utf-8"
)

# 控制台
console_handler = logging.StreamHandler()

formatter = logging.Formatter(
    "%(asctime)s - %(levelname)s - %(message)s"
)
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

logger.addHandler(file_handler)
logger.addHandler(console_handler)

七、常见坑 & 注意事项 ⚠️

❌ 1. 多进程写同一个日志文件

TimedRotatingFileHandler不支持多进程安全

✅ 解决方案:

❌ 2. 修改系统时间导致切分异常

❌ 3. 日志不立即写入

handler.flush()

八、什么时候用 TimedRotatingFileHandler?

✅ 适合:

长期运行程序

❌ 不适合:

九、总结一句话

TimedRotatingFileHandler = 按时间自动切日志 + 控制历史数量

到此这篇关于Python logging.TimedRotatingFileHandler使用方法详解的文章就介绍到这了,更多相关Python logging.TimedRotatingFileHandler内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文