spring-boot - Spring Boot 2 和带有反应器的 logback MDC

标签 spring-boot logback project-reactor mdc

我有一个用 spring 5 和 react 器编写的应用程序。我在订阅者上下文中放入了一些信息,例如用户 ID。
现在我想记录这个用户 ID。我正在尝试使用 MDC,但如果请求更改线程,我会丢失信息。我该如何解决这个问题?
有没有办法设置 MDC,所以所有围绕应用程序的日志,包括外部库,我使用订阅者上下文输入的数据?
我已经尝试过这里描述的内容,但它工作正常,但它并没有解决我的外部库日志问题。

https://simonbasle.github.io/2018/02/contextual-logging-with-reactor-context-and-mdc/

最佳答案

Spring Cloud Sleuth为此提供了解决方案

您需要将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

您可以使用从 logback 访问“userId”键
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
  <layout>
    <Pattern>%X{userId} - %m%n</Pattern>
  </layout> 
</appender>

关于spring-boot - Spring Boot 2 和带有反应器的 logback MDC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50140245/

相关文章:

java - Thymeleaf EL 表达式生成链接为/?param=value 而不是/value

java - 休息 Controller 在 Spring 启动时不起作用

java - 与日志库冲突 - 类路径包含多个 SLF4J 绑定(bind)

kotlin - 在一个响应中发送多个不同类型的 Flux

java - 无法在 Spring Webflux 2.1.0.RELEASE 中启动 Netty 服务器

java - 使用 MongoDB react 驱动程序阻止 react 应用程序中的操作

java - Spring Boot,如何在具有 EmbeddedId 的表中插入新记录

java - Logback 1.3.5 忽略 InternetItem 的 ElasticsearchAppender 属性

java - spring-XD 不读取 logback.xml

java - 在Spring Boot中定位/resource/目录下的静态文件