我有基于Sping Boot 的Web应用程序,它使用Logback进行日志记录。
我还使用以下命令从spring Boot 继承了一些回登录默认值:
<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
和spring-cloud-starter-sleuth
2.2.6.RELEASE
2条答案
按热度按时间jogvjijk1#
从这个问题中,我想您已经了解到
traceId
和spanId
被放置到MDC中。如果您查看一下sleuth文档的日志集成部分,您会发现示例中的跟踪信息介于日志级别(
ERROR
)和pid(97192
)之间。如果您尝试将此信息与logback配置匹配,您会发现日志级别和pid之间没有任何内容:${LOG_LEVEL_PATTERN:-%5p} ${PID:- }
,因此跟踪信息如何到达那里可能是一个有效的问题。如果你再看一下文档,它是这样说的:
此日志配置是由Sleuth自动设置的。您可以通过
spring.sleuth.enabled=false
属性禁用Sleuth或放置您自己的logging.pattern.level
属性来禁用它。它仍然没有明确地解释机制,但它给了你一个巨大的提示:
放置您自己的
logging.pattern.level
属性基于此,你可能会认为日志级别和pid之间没有任何东西,Sleuth只是简单地覆盖日志级别,并将跟踪信息放入其中。如果你搜索文档在代码中提到的属性,你会发现这正是所发生的事情:
TL;DR
Sleuth覆盖日志级别模式并向其中添加跟踪信息:
inkz8wg92#
为了将其恢复到不再提供Sleuth的 Boot ,必须复制
TraceEnvironmentPostProcessor
,沿着在META-INF/spring.factories
中具有一个条目下面是我在原始代码的基础上稍微修改的代码,以使其通过SonarLint。
还有