为了账号安全,请及时绑定邮箱和手机立即绑定

Spring-Cloud-Sleuth 在模式布局中启用 MDC 属性来记录 TraceId

Spring-Cloud-Sleuth 在模式布局中启用 MDC 属性来记录 TraceId

德玛西亚99 2023-08-04 15:43:28
添加 spring-cloud-sleuth 依赖项后,我在日志文件中没有看到 TraceId 或 SpanId。我们使用log4j2和slf4j。显然,这可以在 logback 中开箱即用,但不能在 log4j2 中使用。似乎其他人已经通过在配置文件中添加properties=true来成功使用json布局,但我们使用模式布局,并且布尔值似乎不可用。我已正确配置模式,但这并不重要,因为当我在 MDCPatternConverter 类中设置调试器时,线程上下文映射为空。我可以更改代码并直接设置 MDC 值,但我们下游的人出于某种原因希望我们使用此依赖项。添加了 log4j-JUL 添加了 spring-boot-starter-log4j2<Property name="STP_PATTERN">%d{yyyy-MM-dd HH:mm:ss,SSS zzz} %-5p  [%X{X-B3-TraceId} TEST %X{X-B3-SpanId} %t:%c{1}:%x] -%m%n     </Property>
查看完整描述

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();

}


查看完整回答
反对 回复 2023-08-04
?
HUH函数

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" />



查看完整回答
反对 回复 2023-08-04
?
杨魅力

TA贡献1811条经验 获得超5个赞

如果您想在生成的线程中登录,则需要将 MDC 线程本地上下文从当前线程复制到新线程中。


在主线程中...


 final Map<String, String> threadContext = MDC.getCopyOfContextMap();

 Runnable mythread = () -> { MDC.setContextMap(threadContext); 

                             yourCode(); };

 new Thread(mythread).start();


查看完整回答
反对 回复 2023-08-04
  • 3 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信