-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconfigure.py
64 lines (49 loc) · 1.78 KB
/
configure.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import logging
import sys
import structlog
from ._default_processors import _build_default_processors
from ._trace_processor import _extract_open_telemetry_trace_meta
__all__ = ("configure_logging",)
def configure_logging(
level: str | int = logging.INFO,
*,
json_format: bool,
include_trace: bool,
) -> None:
_configure_structlog(json_format=json_format, include_trace=include_trace)
_configure_default_logging(level=level, json_format=json_format, include_trace=include_trace)
def _configure_structlog(
*,
json_format: bool,
include_trace: bool,
) -> None:
processors = [
*_build_default_processors(json_format=json_format),
structlog.stdlib.ProcessorFormatter.wrap_for_formatter, # for integration with default logging
]
if include_trace:
processors.insert(-1, _extract_open_telemetry_trace_meta) # after defaults
structlog.configure_once(
processors=processors,
logger_factory=structlog.stdlib.LoggerFactory(),
)
def _configure_default_logging(
*,
level: str | int,
json_format: bool,
include_trace: bool,
) -> None:
renderer_processor = structlog.processors.JSONRenderer() if json_format else structlog.dev.ConsoleRenderer()
processors = [
*_build_default_processors(json_format=json_format),
structlog.stdlib.ProcessorFormatter.remove_processors_meta,
renderer_processor,
]
if include_trace:
processors.insert(-2, _extract_open_telemetry_trace_meta) # after defaults
formatter = structlog.stdlib.ProcessorFormatter(processors=processors)
handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(formatter)
root_logger = logging.getLogger()
root_logger.addHandler(handler)
root_logger.setLevel(level)