logging: set formatter on handler creation, not in catching_logs
Conceptually it doesn't check per catching_logs (and catching_logs doesn't restore the older one either). It is just something that is defined for each handler once.
This commit is contained in:
parent
ce0f218793
commit
eceb28e4be
|
@ -273,12 +273,10 @@ def pytest_addoption(parser):
|
|||
|
||||
|
||||
@contextmanager
|
||||
def catching_logs(handler, formatter=None, level=None):
|
||||
def catching_logs(handler, level=None):
|
||||
"""Context manager that prepares the whole logging machinery properly."""
|
||||
root_logger = logging.getLogger()
|
||||
|
||||
if formatter is not None:
|
||||
handler.setFormatter(formatter)
|
||||
if level is not None:
|
||||
handler.setLevel(level)
|
||||
|
||||
|
@ -303,15 +301,17 @@ def catching_logs(handler, formatter=None, level=None):
|
|||
class LogCaptureHandler(logging.StreamHandler):
|
||||
"""A logging handler that stores log records and the log text."""
|
||||
|
||||
stream = None # type: StringIO
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""Creates a new log handler."""
|
||||
logging.StreamHandler.__init__(self, StringIO())
|
||||
super().__init__(StringIO())
|
||||
self.records = [] # type: List[logging.LogRecord]
|
||||
|
||||
def emit(self, record: logging.LogRecord) -> None:
|
||||
"""Keep the log records in a list in addition to the log text."""
|
||||
self.records.append(record)
|
||||
logging.StreamHandler.emit(self, record)
|
||||
super().emit(record)
|
||||
|
||||
def reset(self) -> None:
|
||||
self.records = []
|
||||
|
@ -571,11 +571,12 @@ class LoggingPlugin:
|
|||
get_option_ini(config, "log_cli_date_format", "log_date_format"),
|
||||
get_option_ini(config, "log_auto_indent"),
|
||||
)
|
||||
log_cli_handler.setFormatter(log_cli_formatter)
|
||||
|
||||
log_cli_level = get_log_level_for_setting(config, "log_cli_level", "log_level")
|
||||
self.log_cli_handler = log_cli_handler
|
||||
self.live_logs_context = lambda: catching_logs(
|
||||
log_cli_handler, formatter=log_cli_formatter, level=log_cli_level
|
||||
log_cli_handler, level=log_cli_level
|
||||
)
|
||||
|
||||
def set_log_path(self, fname):
|
||||
|
@ -629,9 +630,9 @@ class LoggingPlugin:
|
|||
self, item: Optional[nodes.Item], when: str
|
||||
) -> Generator[None, None, None]:
|
||||
"""Implements the internals of pytest_runtest_xxx() hook."""
|
||||
with catching_logs(
|
||||
LogCaptureHandler(), formatter=self.formatter, level=self.log_level
|
||||
) as log_handler:
|
||||
log_handler = LogCaptureHandler()
|
||||
log_handler.setFormatter(self.formatter)
|
||||
with catching_logs(log_handler, level=self.log_level):
|
||||
if self.log_cli_handler:
|
||||
self.log_cli_handler.set_when(when)
|
||||
|
||||
|
|
Loading…
Reference in New Issue