Встречается на собеседованиях • сегодня

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

В распределённых системах trace ID передаётся через контекст запроса и автоматически добавляется в логи с помощью инструментов логирования. Вот основные способы:

  1. Middleware/Interceptor
    В веб-фреймворках (Django, FastAPI, Flask) middleware добавляет trace ID в контекст запроса и логи:
python
# 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

text
# Логирование с trace_id
logger.info(f"Request started", extra={"trace_id": trace_id})
response = await call_next(request)
return response
text

2. **Логгеры с контекстом**  
   Библиотеки типа `structlog` или `logging` с фильтрами:

```python
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())
  1. Инструменты observability
    OpenTelemetry автоматически инжектит trace_id в логи через интеграцию с логгерами.

Ключевое: trace ID должен передаваться через весь контекст выполнения (async/thread-local/contextvars) и подхватываться логгером.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы