I use structlog in my project and I would like to (unit) test which handler has emitted which message. Is there a canonical way to do this? I noticed pytest-structlog but could not find any such functionality there. Or is there maybe something I could use from the stdlib / pytest?
So suppose my minimal example looks like
# implementation
import logging.handlers
import structlog
structlog.configure(
wrapper_class=structlog.make_filtering_bound_logger(logging.NOTSET),
context_class=dict,
logger_factory=structlog.stdlib.LoggerFactory(),
cache_logger_on_first_use=False,
)
h1 = logging.StreamHandler()
h1.setLevel(logging.ERROR)
h2 = logging.StreamHandler()
h2.setLevel(logging.DEBUG)
logging.root.addHandler(h1)
logging.root.addHandler(h2)
# test
import structlog
from dummy import minimal
def test_minimal(log):
logger = structlog.getLogger()
logger.warn("I am a warning.")
logger.error("I am an error.")
assert log.has("I am a warning.")
assert log.has("I am an error.")
# how to test what has been emitted by which handler?
# assert not log.handler1.has("I am a warning.")