spring-boot和spring云升级后,Spring Cloud Sleuth停止向MDC推送X-B3-TraceId。
Spring Cloud Sleuth是一个用于分布式系统中实现请求跟踪和服务跟踪的解决方案。它通过将一个唯一的跟踪标识TraceId注入到请求的header中,从而实现请求的追踪。在旧版的Spring Boot和Spring云中,Spring Cloud Sleuth会将TraceId自动推送到MDC(Mapped Diagnostic Context),以便在日志中方便地进行跟踪和定位问题。
然而,在升级后的Spring Boot和Spring云版本中,Spring Cloud Sleuth不再自动将X-B3-TraceId推送到MDC中。这是因为MDC的使用存在一些线程安全的问题,可能导致潜在的内存泄漏和性能问题。因此,Spring Cloud Sleuth决定不再默认推送TraceId到MDC,以避免潜在的风险。
尽管如此,如果你仍然希望将TraceId推送到MDC中,你可以通过编写自定义的日志配置来实现。以下是一个示例:
@Configuration
public class SleuthConfig {
@Bean
public TraceLoggingFilter traceLoggingFilter(Tracer tracer) {
return new TraceLoggingFilter(tracer);
}
public static class TraceLoggingFilter extends OncePerRequestFilter {
private final Tracer tracer;
public TraceLoggingFilter(Tracer tracer) {
this.tracer = tracer;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
try (Tracer.SpanInScope ws = tracer.withSpanInScope(tracer.nextSpan())) {
filterChain.doFilter(request, response);
}
}
}
}
上述示例中,我们通过自定义一个TraceLoggingFilter,并在doFilterInternal方法中将TraceId推送到MDC中。
至于Spring Cloud Sleuth的优势和应用场景,它可以帮助我们在分布式系统中进行请求追踪和服务跟踪,方便我们定位和解决问题。它提供了许多功能,包括生成唯一的TraceId、将TraceId注入到请求header中、通过日志记录将TraceId传播到不同的服务等。通过使用Spring Cloud Sleuth,我们可以更好地了解分布式系统中各个服务之间的调用关系,快速定位问题,并对系统进行优化。
推荐的腾讯云相关产品和产品介绍链接地址:
请注意,以上只是腾讯云的部分产品示例,根据实际需求,还可以结合其他腾讯云产品来满足具体的云计算和应用需求。
领取专属 10元无门槛券
手把手带您无忧上云