2Capture and work with logs.
10from testsuite
import logcapture
11from testsuite.logcapture
import __tracebackhide__
13from ..utils
import tskv
15USERVER_CONFIG_HOOKS = [
'_userver_config_logs_capture']
18logger = logging.getLogger(__name__)
21def pytest_addoption(parser):
22 group = parser.getgroup(
'logs-capture')
24 '--logs-capture-port',
27 help=
'Port to bind logs-capture server to.',
30 '--logs-capture-host',
32 help=
'Host to bind logs-capture server to.',
36@pytest.fixture(scope='session')
37async def userver_log_capture(pytestconfig, userver_log_level):
38 host = pytestconfig.option.logs_capture_host
39 port = pytestconfig.option.logs_capture_port
40 if pytestconfig.option.service_wait
or pytestconfig.option.service_disable:
41 port = port
or DEFAULT_PORT
43 server = logcapture.CaptureServer(
44 log_level=logcapture.LogLevel.from_string(userver_log_level),
45 parse_line=_tskv_parse_line,
47 async with server.start(host=host, port=port):
51@pytest.fixture(scope='session')
52def _userver_config_logs_capture(userver_log_capture):
53 socknames = userver_log_capture.getsocknames()
55 sockname = socknames[0]
57 def patch_config(config, _config_vars) -> None:
58 logging_config = config[
'components_manager'][
'components'][
'logging']
59 default_logger = logging_config[
'loggers'][
'default']
61 default_logger[
'format'] =
'tskv'
62 default_logger[
'testsuite-capture'] = {
70def _tskv_parse_line(rawline: bytes):
71 line = rawline.decode(
'utf-8')
72 return tskv.parse_line(line)