Как trace ID попадает в лог

Python Middle Без компании
Как trace ID попадает в лог
Ответы
В распределённых системах trace ID передаётся через контекст запроса и автоматически добавляется в логи с помощью инструментов логирования. Вот основные способы: - **Middleware/Interceptor** В веб-фреймворках (Django, FastAPI, Flask) middleware добавляет trace ID в контекст запроса и логи: ``` # FastAPI middleware example from uuid import uuid4 from fastapi import Request async def add_trace_id(request: Request, call_next): trace_id = request.headers.get("X-Trace-ID", str(uuid4())) request.state.trace_id = trace_id # Логирование с trace_id logger.info(f"Request started", extra={"trace_id": trace_id}) response = await call_next(request) return response ``` - **Логгеры с контекстом** Библиотеки типа `structlog` или `logging` с фильтрами: ``` import logging from contextvars import ContextVar trace_id = ContextVar("trace_id") class TraceFilter(logging.Filter): def filter(self, record): record.trace_id = trace_id.get() return True logger.addFilter(TraceFilter()) ``` - **Инструменты observability** OpenTelemetry автоматически инжектит trace_id в логи через интеграцию с логгерами. Ключевое: trace ID должен передаваться через весь контекст выполнения (async/thread-local/contextvars) и подхватываться логгером.