单进程 python 程序可以用 rotatingfilehandler 按日志文件大小轮转。设置 maxbytes 和 backupcount 后,活动日志继续使用原文件名,旧文件按编号保存。

给日志处理器设置大小和备份数
保存为 rotate_demo.py。示例阈值设为 512 字节,便于用少量日志触发。
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger("rotate_demo")
logger.setLevel(logging.INFO)
logger.propagate = False
handler = RotatingFileHandler(
"app.log", maxBytes=512, backupCount=2, encoding="utf-8"
)
handler.setFormatter(logging.Formatter("%(levelname)s %(message)s"))
logger.addHandler(handler)
for index in range(40):
logger.info("row %02d payload=%s", index, "x" * 60)
logger.removeHandler(handler)
handler.close()
在空目录运行后,活动日志为 app.log,备份为 app.log.1 和 app.log.2。
立即学习“Python免费学习笔记(深入)”;
核对哪份文件包含最新记录
运行后在同一目录用 Python 查看各文件大小和最后一行。
from pathlib import Path
for path in sorted(Path(".").glob("app.log*")):
lines = path.read_text(encoding="utf-8").splitlines()
print(path.name, path.stat().st_size, lines[-1])app.log 应包含 row 39。app.log.1 是较新的备份,app.log.2 更早。
按实际日志量调整阈值
日常脚本可以把轮转阈值调到 10 MiB,并保留五份。下面这段可替换示例中创建 handler 的部分。
handler = RotatingFileHandler(
"app.log",
maxBytes=10 * 1024 * 1024,
backupCount=5,
encoding="utf-8",
)预留空间时把活动文件也计算在内。多个进程需要写同一套日志时,可以让一个日志监听进程统一写文件。


















