You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RotatingFileHandler达到maxBytes阈值未自动创建新文件问题排查

问题原因分析
  • 日志写入量未达触发阈值:你设置的maxBytes为100字节,只有接口被调用时才会写入日志,单条日志包含时间戳、内容后大概在几十字节,若接口调用次数少、累计写入量未超过阈值,自然不会触发滚动逻辑。
  • basicConfig配置失效:如果代码中在调用logging.basicConfig之前已经有其他地方初始化过logging配置,basicConfig会直接跳过执行,对应的RotatingFileHandler配置不会生效。
  • 多进程写入冲突:如果你的Web服务是多进程部署(比如gunicorn/uvicorn开启了多worker),RotatingFileHandler仅保证线程安全、不保证进程安全,多个进程同时写同一个日志文件会导致滚动判定逻辑紊乱。
修复方案
  1. 首先验证基础滚动逻辑是否正常,单独运行以下测试脚本,确认滚动功能本身是否生效:
import logging
from logging.handlers import RotatingFileHandler

# 显式给logger添加handler,不依赖basicConfig避免优先级问题
logger = logging.getLogger("DemoLogger")
logger.setLevel(logging.INFO)
# 避免重复添加handler
if not logger.handlers:
    rotate_handler = RotatingFileHandler("./app.log", maxBytes=100, backupCount=5)
    log_formatter = logging.Formatter("%(asctime)s - %(message)s")
    rotate_handler.setFormatter(log_formatter)
    logger.addHandler(rotate_handler)

# 循环写入日志触发滚动
for i in range(100):
    logger.info(f"测试日志内容 {i}")

运行后检查目录下是否生成app.log.1、app.log.2这类归档文件,若能生成说明基础配置无问题,问题出在服务运行场景。

  1. 多进程场景适配:如果是多进程部署的Web服务,选择以下任一方案解决进程安全问题:

    • 替换为ConcurrentRotatingFileHandler(需提前安装concurrent-log-handler依赖包),原生支持多进程安全的日志滚动
    • 给每个进程配置独立的日志文件,避免多进程写入同一个文件
    • 将日志上报到统一的日志采集服务,在服务侧做归档滚动,不在业务进程内处理滚动逻辑
  2. 调整maxBytes到合理阈值:当前设置的100字节过小,生产环境建议设置为10*1024*1024即10MB这类合理值,避免频繁触发滚动影响服务性能。

内容的提问来源于stack exchange,提问作者Sagabarnisa S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:15:03