如何使用 Spring Sleuth 2.0 记录 MDC?

Posted

技术标签:

【中文标题】如何使用 Spring Sleuth 2.0 记录 MDC?【英文标题】:How to log MDC with Spring Sleuth 2.0? 【发布时间】:2018-09-09 22:16:24 【问题描述】:

参考How to log MDC with Spring Sleuth?中的问题/答案 我认为这已经/将会随着 spring-cloud 2.0 改变(d),因为不再有 SpanLoggerSlf4jSpanLogger(或者我找不到它)

如果应用程序属性 spring.sleuth.baggage-keysspring.sleuth.propagation-keys 如果 set 也可以放在 MDC 中,那不是很好吗我认为在 Slf4jCurrentTraceContext 里面(因为这个类目前是 final 我不能子类化它)

如果没有,我如何使用 spring-cloud 2.0 相应地实现这一点?

【问题讨论】:

【参考方案1】:

2.1.0 版本中,引入了Slf4jScopeDecorator,它会自动将行李值添加到MDC,只要它们在spring.sleuth.log.slf4j.whitelisted-mdc-keys 配置中被列入白名单。

例如,如果您有以下配置:

spring.sleuth.baggage-keys=key1,key2
spring.sleuth.log.slf4j.whitelisted-mdc-keys=key2

只有key2的值会自动添加MDC,key1的值不会自动添加。

欲了解更多信息,请参阅:https://cloud.spring.io/spring-cloud-sleuth/reference/html/#prefixed-fields

【讨论】:

【参考方案2】:

我们不想将所有条目都放在 MDC 中(这真的没有多大意义)。但是,您可以复制 Slf4jCurrentTraceContext 并以您想要的方式扩展它(并将其注册为 bean),或者创建您自己的 CurrentTraceContext 实现,通过 Bean 后处理器包装现有的 CurrentTraceContext 和执行附加逻辑。我想第一个选项更可取。

【讨论】:

以上是关于如何使用 Spring Sleuth 2.0 记录 MDC?的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud sleuth 如何将跟踪信息添加到 logback 日志行

精通springcloud:分布式日志记录和跟踪使用,Spring Cloud Sleuth

Spring Sleuth - 相关 ID 未记录

Spring Cloud(16)——链路追踪工具Sleuth

如何使用Spring Cloud Sleuth

我们如何在 Spring MVC 项目中使用 Spring Cloud Sleuth?