еще улучшены логи и трейсы
Deploy / deploy (push) Successful in 53s

This commit is contained in:
Раис Юсупалиев
2026-06-20 18:59:42 +03:00
parent 02f5ef93b0
commit c1ac207d15
5 changed files with 115 additions and 10 deletions
+16 -1
View File
@@ -7,6 +7,7 @@ from collections.abc import Iterable
from typing import Any, TextIO
import structlog
from opentelemetry import trace
_UVICORN_LOGGER_NAMES = ("uvicorn", "uvicorn.error", "uvicorn.access")
@@ -19,7 +20,7 @@ def configure_logging(
) -> None:
resolved_stream = sys.stdout if stream is None else stream
formatter = structlog.stdlib.ProcessorFormatter(
foreign_pre_chain=list(_shared_processors()),
foreign_pre_chain=[_add_open_telemetry_context, *_shared_processors()],
processors=[
structlog.stdlib.ProcessorFormatter.remove_processors_meta,
structlog.processors.JSONRenderer(sort_keys=True, ensure_ascii=False),
@@ -33,6 +34,7 @@ def configure_logging(
structlog.configure(
processors=[
structlog.stdlib.PositionalArgumentsFormatter(),
_add_open_telemetry_context,
_render_context_in_event,
*_shared_processors(),
structlog.processors.StackInfoRenderer(),
@@ -62,6 +64,19 @@ def _shared_processors() -> tuple[structlog.types.Processor, ...]:
)
def _add_open_telemetry_context(
_logger: Any,
_method_name: str,
event_dict: structlog.types.EventDict,
) -> structlog.types.EventDict:
span_context = trace.get_current_span().get_span_context()
if span_context.is_valid:
event_dict["trace_id"] = format(span_context.trace_id, "032x")
event_dict["span_id"] = format(span_context.span_id, "016x")
event_dict["trace_flags"] = int(span_context.trace_flags)
return event_dict
def _render_context_in_event(
_logger: Any,
_method_name: str,