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

如何动态修改Python指定模块的日志级别且不丢失对应日志内容

解决方案

实现思路

你可以通过给指定模块的logger添加自定义过滤器的方式,动态修改符合条件的日志级别,既不会丢失日志,也不会影响模块其他日志的正常输出。

代码实现

首先定义自定义日志过滤器:

import logging

class LevelRewriteFilter(logging.Filter):
    def filter(self, record):
        # 匹配aiokafka模块输出的ERROR级别日志
        if record.name.startswith("aiokafka") and record.levelno == logging.ERROR:
            # 将日志级别重写为WARNING
            record.levelno = logging.WARNING
            record.levelname = "WARNING"
        # 返回True保留日志,返回False则丢弃该日志
        return True

然后将过滤器挂载到aiokafka的logger实例上:

# 获取aiokafka对应的logger对象
aiokafka_logger = logging.getLogger("aiokafka")
# 添加自定义过滤器
aiokafka_logger.addFilter(LevelRewriteFilter())
# 确保logger的最低级别设置不低于WARNING,避免重写后的日志被过滤
aiokafka_logger.setLevel(logging.WARNING)

优化方案(可选)

如果不需要修改aiokafka的所有ERROR级日志,只需要修改连接故障相关的特定日志,可以在过滤器中增加日志内容匹配规则,进一步缩小生效范围:

class LevelRewriteFilter(logging.Filter):
    def filter(self, record):
        if (record.name.startswith("aiokafka") 
            and record.levelno == logging.ERROR
            # 匹配日志内容中的特定关键词,可根据实际日志内容调整
            and "连接" in str(record.msg) and "故障" in str(record.msg)):
            record.levelno = logging.WARNING
            record.levelname = "WARNING"
        return True

注意事项

如果你的日志处理器(Handler)单独设置了级别阈值,需要确保处理器的级别低于等于WARNING,否则重写后的WARNING日志会被处理器拦截丢弃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:06:05