У меня есть приложение, написанное с помощью пружины 5 и реактора. Я помещаю в контекст подписчика некоторую информацию, такую как идентификатор пользователя. Теперь я хочу зарегистрировать этот идентификатор пользователя. Я пытаюсь использовать MDC, но если запрос меняет поток, я потерял информацию. Как я могу решить этот вопрос? Есть ли способ настроить MDC, чтобы во всех журналах приложения, включая внешнюю библиотеку, были данные, которые я ввел с использованием контекста подписчика? Я уже пробовал то, что описано здесь, но работает нормально, но не решает мою проблему с журналами внешней библиотеки.
https://simonbasle.github.io/2018/02/contextual-logging-with-reactor-context-and-mdc/




Весенний облачный сыщик предлагает решение для этого
Вам нужно добавить в проект зависимость Spring Cloud Sleuth
Чтобы добавить настраиваемое свойство в контекст сыщика, используйте
MDC.put("userId", userId);
ExtraFieldPropagation.set("userId", userId);
здесь "userId" - это ключ, который используется для распространения значения
Чтобы распространять ключ userId при изменении потоков, используйте
spring.sleuth.propagation-keys=userId
spring.sleuth.log.slf4j.whitelisted-mdc-keys=userId
Вы можете получить доступ к ключу userId из входа в систему, используя
<appender name = "CONSOLE" class = "ch.qos.logback.core.ConsoleAppender">
<layout>
<Pattern>%X{userId} - %m%n</Pattern>
</layout>
</appender>
взгляните на эту статью из двух частей ndportmann.com/logging-with-context-in-spring-webflux