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

Python logging模块:如何仅捕获指定单一级别日志?

Python 仅捕获DEBUG级别日志的实现方法

完全可以实现只捕获DEBUG级别的日志,核心是通过自定义日志过滤器精确控制。以下是可直接运行的实现方案:

自定义特定级别过滤器

先写一个过滤器类,只允许指定级别的日志通过:

import logging

class SpecificLevelFilter(logging.Filter):
    def __init__(self, target_level):
        self.target_level = target_level
        self.target_level_name = logging.getLevelName(target_level)

    def filter(self, record):
        # 仅保留与目标级别完全匹配的日志
        return record.levelname == self.target_level_name

配置日志并测试

把过滤器绑定到日志处理器上,同时注意日志器的级别设置:

# 创建日志实例
logger = logging.getLogger("debug_only")
# 日志器级别必须设为DEBUG,确保DEBUG日志能传递到处理器
logger.setLevel(logging.DEBUG)

# 创建控制台输出处理器
handler = logging.StreamHandler()
# 给处理器添加过滤器,指定只保留DEBUG级别
handler.addFilter(SpecificLevelFilter(logging.DEBUG))

# 将处理器添加到日志器
logger.addHandler(handler)

# 测试不同级别日志
logger.debug("这条DEBUG日志会被输出")
logger.info("这条INFO日志会被过滤")
logger.warning("这条WARNING日志会被过滤")
logger.error("这条ERROR日志会被过滤")
logger.critical("这条CRITICAL日志会被过滤")

关键注意事项

  • 日志器的setLevel必须设为DEBUG或更低:如果设成INFO及以上,DEBUG级别的日志会被日志器直接拦截,根本到不了处理器的过滤器。
  • 过滤器判断逻辑:用levelname匹配比直接用数字levelno更稳妥,避免自定义级别导致的数字冲突;如果只用标准日志级别,也可以改成return record.levelno == self.target_level。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:40:00