Python Caplog不捕获自定义记录器而是捕获默认记录器

问题描述

我有一个自定义记录器,记录到设置在级别 DEBUG

的标准输出
class MyLogger(Logger):
    def __init__(self,name):
        super().__init__(name)
        stdout = StreamHandler(sys.stdout)
        stdout.setLevel(10)
        self.addHandler(stdout)

class Foo:
    def __init__(self):
        self.log = MyLogger(__name__)

记录器使用以下示例:

f = Foo()
f.log.debug("Test logger")

这会将 Test logger 打印到标准输出

我正在尝试进行一些单元测试并使用 caplog 来断言某些日志发生。如下图:

def test_fetch(caplog):
    f = Foo()

    with caplog.at_level(logging.DEBUG):
        f.log.debug("Test logger again")
    assert "Test logger again" in caplog.text

此测试失败,因为在断言语句(或其他任何地方)处的 caplog 为空。然而,使用标准记录器的相同测试通过了:

def test_fetch(caplog):
    # f = Foo()
    with caplog.at_level(logging.DEBUG):
        logging.getLogger(__name__).debug("Test logger again")
    assert "Test logger again" in caplog.text

为什么会这样?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)