如何保留自有模块DEBUG日志并屏蔽第三方模块DEBUG日志?
解决方案
要保留main.py及my_submodule1~9的DEBUG日志,同时屏蔽thirdparty_module的DEBUG日志,只需针对第三方模块的日志记录器单独调整级别即可,无需修改第三方代码。
修改后的main.py代码
import logging, sys logging.basicConfig( level=logging.DEBUG, handlers=[logging.FileHandler("test.log"), logging.StreamHandler(sys.stdout)] ) # 全局root日志级别设为DEBUG,确保自有模块DEBUG日志正常输出 logger = logging.getLogger("main") logger.info("hello main!") # 获取第三方模块的日志记录器,将级别设为INFO及以上,过滤DEBUG日志 thirdparty_logger = logging.getLogger("thirdparty_module") thirdparty_logger.setLevel(logging.INFO) import thirdparty_module thirdparty_module.foo() import my_submodule1
核心原理
Python日志系统中,每个模块的日志记录器通过logging.getLogger(模块名)创建,彼此独立且默认继承父级(通常是root)的日志级别:
- 我们通过指定名称获取第三方模块的日志记录器,将其级别设为
logging.INFO后,该记录器只会处理INFO及更高级别的日志,DEBUG日志会被直接过滤。 - 自有模块的日志记录器继承root的
DEBUG级别,因此它们的DEBUG日志不受影响,会正常输出到文件和控制台。
扩展:彻底屏蔽第三方模块所有日志
如果需要禁止第三方模块输出任何日志(包括INFO及以上级别),可直接禁用该记录器:
thirdparty_logger = logging.getLogger("thirdparty_module") thirdparty_logger.disabled = True
内容的提问来源于stack exchange,提问作者Basj
相关产品推荐
相关产品推荐

