Capture logging¶
In this code sample, package foo level INFO and above log
messages are captured and available in cm.output as a list[str]
import logging
import unittest
from logging_strict.tech_niques import captureLogs
from logging_strict.constants import LOG_FORMAT
class SuppressPackageLogging(unittest.TestCase):
def test_logging_capture(self):
"""Docs example. Confirms levelname and message, not others"""
msg0 = 'first msg'
msg1 = 'second msg'
# "%(levelname)s %(module)s %(funcName)s: %(lineno)d: %(message)s"
with captureLogs('foo', level='INFO', format_=LOG_FORMAT) as cm:
logging.getLogger('foo').info(msg0)
logging.getLogger('foo.bar').error(msg1)
out = cm.output
self.assertIsInstance(out, list)
self.assertEqual(len(out), 2)
line0 = out[0]
line1 = out[1]
# Confirm levelname
self.assertIn("INFO", line0)
self.assertIn("ERROR", line1)
# Confirm message
self.assertIn(msg0, line0)
self.assertIn(msg1, line1)
if __name__ == "__main__": # pragma: no cover
unittest.main(tb_locals=True)