如何解决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
相关产品推荐
相关产品推荐

