import logging class TestHandler(logging.Handler): def __init__(self, records, msgs, *args, **kwargs): self.records = records self.msgs = msgs super().__init__(*args, **kwargs) def emit(self, record): self.records.append(record) self.msgs.append(self.format(record)) class Logger: def __init__(self, name, level=logging.NOTSET): self.name = name self.level = level self.records, self.msgs = [], [] self.logger = logging.getLogger(self.name) self.handler = TestHandler(self.records, self.msgs, level=self.level) def __enter__(self): self.logger.addHandler(self.handler) return self def __exit__(self, *exc_info): self.logger.removeHandler(self.handler)