I have a custom logger, logging to stdout set at level 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__)
The logger works with the below example:
f = Foo()
f.log.debug("Test logger")
This prints Test logger
to stdout
I am trying to do some unittesting and using caplog to assert that certain logs occur. Like below:
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
This test fails since caplog is empty at the assert statement (or anywhere else). The same test with the standard logger however, passes:
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
Why is this happening?
question from:
https://stackoverflow.com/questions/65951036/python-caplog-not-capturing-custom-logger-but-capturing-default-logger 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…