如何在pytest中抑制第三方日志

我们刚刚从 切换nosepytest并且似乎没有抑制第三方日志记录的选项。在nose配置中,我们有以下行:

logging-filter=-matplotlib,-chardet.charsetprober,-PIL,-fiona.env,-fiona._env

其中一些日志非常啰嗦,尤其是matplotlib我们不想看到输出,只想从我们的日志中输出。

但是我找不到等效的设置pytest。是否可以?我错过了什么吗?谢谢。

回答

我这样做的方法是创建一个记录器名称列表,必须在conftest.py 中禁用其日志。

例如,如果我想禁用一个名为 的记录器app,那么我可以编写如下的conftest.py

import logging

disable_loggers = ['app']

def pytest_configure():
    for logger_name in disable_loggers:
        logger = logging.getLogger(logger_name)
        logger.disabled = True

然后运行我的测试:

import logging

def test_brake():
    logger = logging.getLogger("app")
    logger.error("Hello there")
    assert True

收集 ... 收集 1 项

test_car.py::test_brake PASSED
[100%]

============================== 1 在 0.01 秒内通过 ================ ================

然后,您好,那里没有,因为appconftest.py中禁用了具有该名称的记录器。

但是,如果我将测试中的记录器名称更改为app2并再次运行测试:

import logging

def test_brake():
    logger = logging.getLogger("app2")
    logger.error("Hello there")
    assert True

收集 ... 收集 1 项

test_car.py::test_brake -------------------------------- 实时日志调用 --------- ------------------------ 错误 app2:test_car.py:5你好,已通过
[100%]

============================== 1 在 0.01 秒内通过 ================ ================

如您所见,您好,因为app2没有禁用记录器。

结论

基本上,您可以执行相同的操作,但只需将不需要的记录器名称添加到conftest.py 中,如下所示:

import logging

disable_loggers = ['matplotlib', 'chardet.charsetprober', <add more yourself>]

def pytest_configure():
    for logger_name in disable_loggers:
        logger = logging.getLogger(logger_name)
        logger.disabled = True


以上是如何在pytest中抑制第三方日志的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>