В логах асинхронной отправки уведомлений пропал идентификатор трассы
Фильтр кладёт traceId в MDC на входе запроса, и все логи обработки его содержат. Отправка уведомлений вынесена в метод с @Async, выполняющийся в отдельном пуле потоков. Логи этого метода выходят с пустым traceId, и их нельзя связать с запросом.
Почему и как исправить?
- MDC привязан к потоку; контекст нужно переносить в поток пула декоратором задач
- MDC очищается при выходе из контроллера, и асинхронный код не успевает прочитать
- @Async не поддерживает логирование через SLF4J
- Нужно логировать в асинхронном методе через System.out
