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

如何解决Python Flask应用中日志重复输出(仅保留格式化日志)

解决Flask日志重复输出问题

你的问题是因为根日志器(logging.getLogger())默认已存在一个StreamHandler,它会输出默认格式的日志,而你又添加了自定义Handler,导致两条日志重复输出。要只保留带RequestID的自定义格式日志,只需移除根日志器的默认Handler即可。

修改后的日志配置代码

import logging
import sys
# 请确保已导入RequestID和RequestIDLogFilter

def setup_logging(app):
    """
    配置日志,包含RequestId及相关日志信息
    """
    RequestID(app)
    handler = logging.StreamHandler()
    handler.setStream(sys.stdout)
    handler.propagate = False

    handler.setFormatter(
        logging.Formatter("[MHPM][%(module)s][%(funcName)s] %(levelname)s : %(request_id)s - %(message)s")
    )

    handler.addFilter(RequestIDLogFilter())

    # 清空根日志器的所有默认Handler,避免重复输出
    root_logger = logging.getLogger()
    for existing_handler in root_logger.handlers[:]:
        root_logger.removeHandler(existing_handler)
    
    root_logger.addHandler(handler)
    root_logger.setLevel(level="DEBUG")

原理说明

Flask启动时会自动给根日志器添加一个默认StreamHandler,该Handler会输出类似DEBUG:src.service.MHPMService:xxx的默认格式日志。通过遍历并移除根日志器的所有现有Handler,再添加你自定义的Handler,就能确保只有带RequestID的目标格式日志被输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:20:38