spring-boot - spring cloud sleuth 如何将跟踪信息添加到 logback 日志行

标签 spring-boot logback spring-cloud-sleuth

我有基于 Spring Boot 的 Web 应用程序,它使用 logback 进行日志记录。
我还使用以下命令从 Spring Boot 继承了一些 logback 默认值:

<include resource="org/springframework/boot/logging/logback/base.xml"/>
我想开始记录跟踪信息,所以我补充说:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
Sleuth 向日志行添加了跟踪信息,但我找不到任何 %X%mdc在模式中:https://github.com/spring-projects/spring-boot/blob/2.3.x/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml
Sleuth 如何将跟踪信息添加到日志行中?
我用 spring-cloud-starter-parent Hoxton.SR9带来 Spring Boot 2.3.5.RELEASE 的 parent 和 spring-cloud-starter-sleuth 2.2.6.RELEASE

最佳答案

(tl;底部的博士)
从这个问题我想你已经知道 traceIdspanId被放入 MDC。
如果你看一下 log integration section of the sleuth docs您将看到示例中的跟踪信息介于日志级别 ( ERROR ) 和 pid ( 97192 ) 之间。如果您尝试将其与 logback config 匹配您会看到日志级别和 pid 之间没有任何内容:${LOG_LEVEL_PATTERN:-%5p} ${PID:- }那么追踪信息如何到达那里可能是一个有效的问题。
如果你再看看文档,它说:

This log configuration was automatically setup by Sleuth. You can disable it by disabling Sleuth via spring.sleuth.enabled=false property or putting your own logging.pattern.level property.


这仍然没有明确解释机制,但它给了你一个巨大的提示:

putting your own logging.pattern.level property


基于此,您可以认为日志级别和 pid 之间没有任何内容,Sleuth 只是覆盖了日志级别并将跟踪信息放入其中。如果你搜索文档在代码中提到的属性,你会发现 it is exactly what happens :
TL; 博士
Sleuth 覆盖日志级别模式并将跟踪信息添加到其中:
map.put("logging.pattern.level", "%5p [${spring.zipkin.service.name:" + "${spring.application.name:}},%X{traceId:-},%X{spanId:-}]");

关于spring-boot - spring cloud sleuth 如何将跟踪信息添加到 logback 日志行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65846859/

相关文章:

java - 使用自定义用户对象时的 Spring session redis

java - 使用 Spring boot 的 RSS 提要

java - 在mockito中模拟方法返回空指针异常?

java - 清除日志文件后 Logback 停止记录

spring-boot - Spring Boot sleuth 与 jms 集成

基于 Java 的 Logback 配置

java - JSP内容显示在浏览器上

java - Jersey 服务器日志记录/w Logback

java - 带有 Logback 的 Spring Boot 应用程序不会作为 Systemd 服务登录到指定位置

spring-boot - 使用 spring-JMS 和 spring cloud sleuth 时的 BeanNotOfRequiredTypeException