- Используется SLF4J MDC.
- Используется асинхронный контекст.
- Некоторые свойства контекста должны быть включены в записи журнала событий.
В своем IoC-контейнере зарегистрируйте
класс AsyncContextMdcAdapter
как singleton-зависимость приложения.
На старте приложения вызовите метод run():
AsyncContextMdcAdapter mdcAdapter;
...
mdcAdapter.run();Например, контекст содержит свойство userId и вы используете log4j2.
Чтобы добавить это свойство в записи журнала, добавьте его в шаблон записи
как %X{userId}.
Если вы используете Spring Boot, добавьте следующую регистрацию:
@Bean
public AsyncContextMdcAdapter mdcAdapter(IAsyncContext context) {
return new AsyncContextMdcAdapter(context);
}И обработчик события запуска приложения:
@Component
public class AsyncContextMdcAdapterRunner {
private final AsyncContextMdcAdapter mdcAdapter;
...
@EventListener(ApplicationReadyEvent.class)
public void onApplicationStarted() {
mdcAdapter.run();
}
}