如何在pytest运行中仅显示指定logger的DEBUG日志并屏蔽其他?
解决pytest中仅显示指定Logger的DEBUG输出问题
你的问题核心在于pytest的日志配置优先级高于你在测试文件中设置的logging配置,所以你在test_functions.py里修改根日志级别的操作被pytest的--log-cli-level=debug覆盖了,导致所有模块的DEBUG日志都被输出。
下面是两种靠谱的解决方案:
方案一:直接在setup.cfg中配置(推荐)
修改你的setup.cfg,将全局日志级别设为WARN,同时单独指定mylogger的级别为DEBUG:
[tool:pytest] addopts = log_cli=true --log-cli-level=WARN --log-cli-logger=mylogger:DEBUG
--log-cli-level=WARN:设置全局根日志的输出级别为WARN,这样第三方库的DEBUG日志会被屏蔽--log-cli-logger=mylogger:DEBUG:单独给mylogger开启DEBUG级别的输出,不受全局级别限制
如果之后需要给其他logger单独设置级别,只需追加--log-cli-logger=xxx:LEVEL即可。
方案二:通过conftest.py配置
如果你需要更灵活的日志控制,可以在项目根目录创建conftest.py,用代码方式配置日志:
def pytest_configure(config): import logging # 将根日志级别设为WARN,屏蔽所有未单独配置的DEBUG日志 root_logger = logging.getLogger() root_logger.setLevel(logging.WARN) # 单独开启自定义logger的DEBUG级别 my_logger = logging.getLogger("mylogger") my_logger.setLevel(logging.DEBUG) # 确保logger的propagate属性为True(默认就是True),这样日志能传递到pytest的日志系统 my_logger.propagate = True
为什么之前的方法无效?
pytest会在测试运行前初始化自己的日志系统,它会覆盖你在测试文件中通过logging.basicConfig()或logging.getLogger().setLevel()设置的根日志级别。所以必须通过pytest专属的配置参数或钩子函数来调整日志规则。
内容的提问来源于stack exchange,提问作者ProfHase85
相关产品推荐
相关产品推荐

