3 回答
TA贡献1829条经验 获得超4个赞
添加 spring-cloud-sleuth 依赖项后,我在日志文件中没有看到 TraceId 或 SpanId。我们使用log4j2和slf4j。显然,这可以在 logback 中开箱即用,但不能在 log4j2 中使用。似乎其他人已经通过在配置文件中添加properties=true来成功使用json布局,但我们使用模式布局,并且布尔值似乎不可用。我已正确配置模式,但这并不重要,因为当我在 MDCPatternConverter 类中设置调试器时,线程上下文映射为空。我可以更改代码并直接设置 MDC 值,但我们下游的人出于某种原因希望我们使用此依赖项。
添加了 log4j-JUL 添加了 spring-boot-starter-log4j2
@Bean
ScopeDecorator threadContextScopeDecorator() {
return new ThreadContextScopeDecorator();
}
TA贡献1836条经验 获得超4个赞
您需要做的就是以下操作:
添加 io.zipkin.brave:brave-context-log4j2 依赖项
添加 org.springframework.boot:spring-boot-starter-log4j2 依赖
添加 org.springframework.cloud:spring-cloud-starter-sleuth 依赖
排除默认的 spring 日志记录
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
在 log4j2.xml 中调整模式布局
<PatternLayout pattern="[%d{yyy-MM-dd HH:mm:ss:SSS}] [%X{traceId}, %X{spanId}] {%-5level} - %l - %m%n" />
TA贡献1811条经验 获得超6个赞
如果您想在生成的线程中登录,则需要将 MDC 线程本地上下文从当前线程复制到新线程中。
在主线程中...
final Map<String, String> threadContext = MDC.getCopyOfContextMap();
Runnable mythread = () -> { MDC.setContextMap(threadContext);
yourCode(); };
new Thread(mythread).start();
添加回答
举报