Вступить в клуб →
сложнаявопросНаблюдаемость: логи, метрики Micrometer, трассировка

В логах асинхронной отправки уведомлений пропал идентификатор трассы

Фильтр кладёт traceId в MDC на входе запроса, и все логи обработки его содержат. Отправка уведомлений вынесена в метод с @Async, выполняющийся в отдельном пуле потоков. Логи этого метода выходят с пустым traceId, и их нельзя связать с запросом.

Почему и как исправить?

  • MDC привязан к потоку; контекст нужно переносить в поток пула декоратором задач
  • MDC очищается при выходе из контроллера, и асинхронный код не успевает прочитать
  • @Async не поддерживает логирование через SLF4J
  • Нужно логировать в асинхронном методе через System.out

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела