Расширяя пример из JEP, я бы хотел, чтобы все три журнала содержали одинаковые значения MDC:
Код: Выделить всё
Response handle() throws ExecutionException, InterruptedException {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
// TODO: set MDC "somehow"
Supplier user = scope.fork(() -> logger.info("1"));
Supplier order = scope.fork(() -> logger.info("2"));
scope.join().throwIfFailed();
logger.info("3");
return new Response(user.get(), order.get());
}
}
Мои первоначальные попытки решить эту проблему были сосредоточены на использовании ScopedValue (JEP 429). В отличие от ThreadLocal, такие значения наследуются ветвями области видимости, поэтому они кажутся хорошими кандидатами для хранения маркеров MDC.
Чтобы реализовать это, мне пришлось бы либо напрямую обратиться к a ScopedValue из компонентов журналирования Logback (возможно ли это?) или для управления MDC. Я попытался перезаписать MDCAdapter, но это не удалось (похоже, что Logback не использует, например, MDCAdapter.get для фактического чтения значения MDC).
Подробнее здесь: https://stackoverflow.com/questions/781 ... dtaskscope