You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Sleuth能否为Logback日志提供Span时长并自动计算?

问题

我正在使用Spring Cloud Sleuth为应用提供分布式链路追踪,通过logback-spring.xml配置Logback记录日志,日志格式配置如下:

{ "severity": "%level", "service": "${springAppName:-}", "trace": "%X{X-B3-TraceId:-}", "span": "%X{X-B3-SpanId:-}", "parent": "%X{X-B3-ParentSpanId:-}", "exportable": "%X{X-Span-Export:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" }

请问Spring Cloud Sleuth是否会自动计算并为日志提供Span时长?

回答

嘿,这个问题问得很实际!我来给你拆解清楚:

Spring Cloud Sleuth 确实会自动计算Span的时长,但默认情况下,这个时长数据不会自动出现在你当前配置的日志格式里——因为它没有被放入MDC(也就是你用%X{...}读取的上下文容器)中。

具体细节:

当Sleuth创建一个Span(比如处理HTTP请求、发起Feign远程调用时),它会自动记录Span的开始时间;当Span结束(请求处理完成、远程调用返回)时,会自动算出这个Span的持续时长(从开始到结束的时间差)。不过这个时长信息默认只用于链路追踪平台的上报(比如Zipkin、Jaeger),并不会主动放到MDC里供Logback直接读取。

如果想在日志里输出Span时长,你可以这么做:

  • 自定义SpanHandler注入MDC:
    你可以注册一个自定义的SpanHandler(如果是基于Micrometer Tracing的Sleuth 3.x+版本),在Span结束时把时长放入MDC中。举个简单的实现例子:

    import io.micrometer.tracing.Span;
    import io.micrometer.tracing.SpanHandler;
    import org.slf4j.MDC;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SpanDurationMdcHandler implements SpanHandler {
        @Override
        public boolean end(Span span) {
            // 将Span时长转成毫秒后放入MDC
            long durationMs = span.getDuration().toMillis();
            MDC.put("spanDuration", durationMs + "ms");
            // 调用父类方法保证原有链路逻辑正常执行
            return super.end(span);
        }
    
        @Override
        public void start(Span span) {
            // Span开始时清空MDC字段,避免残留脏数据
            MDC.remove("spanDuration");
            super.start(span);
        }
    }
    

    之后修改你的Logback日志格式,添加"spanDuration": "%X{spanDuration:-}"字段,这样日志里就会显示Span的时长了。

  • 直接通过链路平台查看:
    如果你只是需要查看Span时长而非必须输出到本地日志,那Sleuth上报到Zipkin、Jaeger这些平台的数据里已经包含了每个Span的开始时间、结束时间和时长,直接在平台上检索查看即可,不用修改本地日志配置。

注意:不同版本的Spring Cloud Sleuth API略有差异(比如2.x版本用的是Sleuth原生Span API,3.x+迁移到了Micrometer Tracing),实现时要对应自己的版本调整代码。


内容的提问来源于stack exchange,提问作者Ilya Zinkovich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:42:49