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

Python日志按级别互斥输出方案咨询:避免重复日志输出

这问题我之前做项目时也碰到过,明明DEBUG日志已经包含了INFO版本的所有信息,结果两条一起打出来显得特别冗余,确实头疼。给你几个实用的解决方案,按需选就行:

方案1:封装自定义日志方法(最省心)

直接写个小函数把逻辑封装起来,调用的时候传两个消息,让函数自己判断输出哪条:

import logging

logger = logging.getLogger(__name__)

def log_info_or_debug(info_msg, debug_msg):
    # 先判断当前logger是否开启了DEBUG级别
    if logger.isEnabledFor(logging.DEBUG):
        logger.debug(debug_msg)
    else:
        logger.info(info_msg)

# 用的时候就这么写
log_info_or_debug('AA', 'AABB')

这个方法最简单,零学习成本,改代码也只需要把原来的两行日志换成一行调用就行,完美避免重复输出。

方案2:自定义Formatter(进阶统一管理)

如果你的项目日志格式要求比较统一,不想每个地方都写自定义函数,可以试试自定义日志Formatter。思路是把两种消息都传递给日志记录,让Formatter根据级别选输出内容:

import logging

class SmartLogFormatter(logging.Formatter):
    def format(self, record):
        # 如果是DEBUG级别,优先输出详细消息
        if record.levelno == logging.DEBUG:
            return getattr(record, 'detailed_msg', record.getMessage())
        # INFO及以上级别,输出精简消息
        else:
            return getattr(record, 'simple_msg', record.getMessage())

# 配置你的logger
handler = logging.StreamHandler()
handler.setFormatter(SmartLogFormatter())
logger = logging.getLogger(__name__)
logger.addHandler(handler)

# 使用时通过extra传递两种消息
logger.info('AA', extra={'detailed_msg': 'AABB'})
logger.debug('AABB', extra={'simple_msg': 'AA'})

这个方法适合大型项目,能统一控制所有日志的输出逻辑,但需要额外传递extra参数,初期改代码会多花点时间。

方案3:用日志过滤器处理(适合存量代码)

如果你的项目已经有大量现有日志代码,不想逐个修改,可以试试加个日志过滤器,自动过滤掉重复的INFO日志:

import logging

class DuplicateLogFilter(logging.Filter):
    def filter(self, record):
        # 逻辑:如果当前开启了DEBUG级别,且这条是INFO日志,且属于要过滤的重复项,就返回False(过滤掉)
        if (record.levelno == logging.INFO 
            and logger.isEnabledFor(logging.DEBUG)
            and record.msg == 'AA'):  # 这里可以根据实际情况调整判断条件,比如用标识前缀
            return False
        return True

# 给logger加上过滤器
logger = logging.getLogger(__name__)
logger.addFilter(DuplicateLogFilter())

这个方法不用改原有日志调用,但需要你准确识别哪些INFO和DEBUG日志是成对的,要是成对日志很多,维护过滤器的判断条件会有点麻烦,适合小范围的重复场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:47:24