Sobes.tech
Back to questions
Junior — Middle
74

Каким образом уникальный идентификатор трассировки передается и отображается в логах системы?

Answer from AI

sobes.tech AI

Уникальный идентификатор трассировки (trace ID) обычно передается через контекст выполнения и включается в логи для корреляции событий в распределённых системах.

В Python это можно реализовать следующим образом:

  1. Генерируется уникальный trace ID (например, UUID) при начале обработки запроса.
  2. Этот ID передается через контекст (например, с помощью contextvars или параметров функций).
  3. В логах используется форматтер, который добавляет trace ID к каждой записи.

Пример с использованием стандартного модуля logging и contextvars:

import logging
import uuid
import contextvars

trace_id_var = contextvars.ContextVar('trace_id')

class TraceIdFilter(logging.Filter):
    def filter(self, record):
        record.trace_id = trace_id_var.get('no-trace-id')
        return True

logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(trace_id)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.addFilter(TraceIdFilter())
logger.setLevel(logging.INFO)

# В начале обработки запроса
trace_id_var.set(str(uuid.uuid4()))

logger.info('Начало обработки запроса')

# В логах будет что-то вроде:
# 2024-06-01 12:00:00,000 - 123e4567-e89b-12d3-a456-426614174000 - INFO - Начало обработки запроса

Таким образом, trace ID передается через контекст и отображается в логах для удобства трассировки и отладки.