- Используется 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();
}
}