首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-Cloud-Sleuth在模式布局中启用MDC属性以记录TraceId

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

Stack Overflow用户
提问于 2019-09-18 05:20:58
回答 2查看 3.1K关注 0票数 2

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

添加log4j-JUL添加spring-boot-starter-log4j2

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2019-09-18 15:49:31

侦探利用了Brave的诱饵。您必须将io.zipkin.brave:brave-context-log4j2依赖项添加到类路径中。有关更多信息,请查看Brave的文档https://github.com/openzipkin/brave/tree/master/context/log4j2,为了方便起见,我会将其复制到此处

这会将跟踪和跨度ID添加到Log4J 2线程上下文中,以便您可以相应地搜索或聚合日志。

为此,请使用ThreadContextScopeDecorator配置brave.Tracing,如下所示:

只需创建一个ThreadContextScopeDecorator类型的bean,Sleuth就会选择它

代码语言:javascript
复制
@Bean
ScopeDecorator threadContextScopeDecorator() {
return new ThreadContextScopeDecorator();
}
票数 2
EN

Stack Overflow用户

发布于 2019-09-18 05:47:48

如果您想要在派生的线程中进行日志记录,则需要将MDC线程本地上下文从当前线程复制到新线程中。

在主线程中...

代码语言:javascript
复制
 final Map<String, String> threadContext = MDC.getCopyOfContextMap();
 Runnable mythread = () -> { MDC.setContextMap(threadContext); 
                             yourCode(); };
 new Thread(mythread).start();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57982214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档