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

配置自定义Logger后Waitress仍输出重复日志问题咨询

排查思路
  • 确认重复日志的实际归属:在CustomFormatter的format方法中临时增加print(record.name)逻辑,判断重复日志是否来自未被捕获的waitress子级logger(如waitress.channel、waitress.server),还是根logger默认处理器导致的重复输出
  • 检查配置执行顺序:确认是否存在日志配置完成后,Flask初始化、第三方依赖调用logging.basicConfig的逻辑,该操作会给根logger新增默认StreamHandler,导致日志同时从自定义处理器和根处理器输出,出现重复现象
  • 核查根logger配置:打印logging.root.handlers确认是否存在未被清空的默认处理器,这是绝大多数Python日志重复问题的根源
可行解决方案
  1. 批量禁用所有waitress、werkzeug相关logger
    你当前仅配置了waitress、werkzeug的根logger,未覆盖其下的子logger,新增如下代码批量禁用所有相关logger:
for logger_name in logging.root.manager.loggerDict:
    if logger_name.startswith("waitress") or logger_name.startswith("werkzeug"):
        target_log = logging.getLogger(logger_name)
        target_log.disabled = True
        target_log.propagate = False
  1. 清空根logger默认配置
    在所有日志配置逻辑的最开头,先清空根logger的默认处理器,避免兜底输出:
# 清空根logger所有默认处理器
logging.root.handlers = []
# 根logger级别设为最高,避免捕获未匹配的日志
logging.root.setLevel(logging.CRITICAL)
  1. 启动Waitress时显式关闭日志输出
    调用Waitress的serve方法时,直接传入参数关闭其内置日志输出,优先级高于logger配置:
from waitress import serve
serve(app, log_socket_errors=False, _quiet=True)

注:_quiet是Waitress内置的非公开参数,可直接关闭默认的访问日志、错误日志输出

  1. 调整配置执行顺序
    将日志配置顺序调整为:先清空根logger默认配置 → 再禁用第三方库logger → 最后初始化自定义应用logger,避免配置被后续逻辑覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:36:04