猿问

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

添加 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>


德玛西亚99
浏览 223回答 3
3回答

浮云间

添加 spring-cloud-sleuth 依赖项后,我在日志文件中没有看到 TraceId 或 SpanId。我们使用log4j2和slf4j。显然,这可以在 logback 中开箱即用,但不能在 log4j2 中使用。似乎其他人已经通过在配置文件中添加properties=true来成功使用json布局,但我们使用模式布局,并且布尔值似乎不可用。我已正确配置模式,但这并不重要,因为当我在 MDCPatternConverter 类中设置调试器时,线程上下文映射为空。我可以更改代码并直接设置 MDC 值,但我们下游的人出于某种原因希望我们使用此依赖项。添加了 log4j-JUL 添加了 spring-boot-starter-log4j2@BeanScopeDecorator threadContextScopeDecorator() {return new ThreadContextScopeDecorator();}

HUH函数

您需要做的就是以下操作:添加 io.zipkin.brave:brave-context-log4j2 依赖项添加 org.springframework.boot:spring-boot-starter-log4j2 依赖添加 org.springframework.cloud:spring-cloud-starter-sleuth 依赖排除默认的 spring 日志记录<dependency>&nbsp; &nbsp; &nbsp;<groupId>org.springframework.boot</groupId>&nbsp; &nbsp; &nbsp;<artifactId>spring-boot-starter-web</artifactId>&nbsp; &nbsp; &nbsp;<exclusions>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<exclusion>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<groupId>org.springframework.boot</groupId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<artifactId>spring-boot-starter-logging</artifactId>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</exclusion>&nbsp; &nbsp; &nbsp;</exclusions>&nbsp;</dependency>在 log4j2.xml 中调整模式布局<PatternLayout pattern="[%d{yyy-MM-dd HH:mm:ss:SSS}] [%X{traceId}, %X{spanId}] {%-5level} - %l - %m%n" />

杨魅力

如果您想在生成的线程中登录,则需要将 MDC 线程本地上下文从当前线程复制到新线程中。在主线程中...&nbsp;final Map<String, String> threadContext = MDC.getCopyOfContextMap();&nbsp;Runnable mythread = () -> { MDC.setContextMap(threadContext);&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;yourCode(); };&nbsp;new Thread(mythread).start();
随时随地看视频慕课网APP

相关分类

Java
我要回答