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

自定义Logback日志无法显示Sleuth的spanId与traceId求助

问题:Logback自定义配置无法输出Sleuth的traceId和spanId

我在自定义Logback配置中尝试输出Sleuth的spanId和traceId,但这两个字段始终为空。

我的Logback配置如下:

<appender name="ELK-CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <pattern>
                <pattern>
                {
                    "timestamp": "@timestamp",
                    "severity": "%level",
                    "service": "${springAppName:-}",
                    "trace": "%X{traceId:-}",
                    "span": "%X{spanId:-}",
                    "pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger{40}",
                    "rest": "%message"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

实际输出的日志中trace和span字段为空:

{
    "timestamp":"@timestamp",
    "severity":"INFO",
    "service":"springAppName_IS_UNDEFINED",
    "trace":"",
    "span":"",
    "pid":"21524",
    "thread":"reactor-http-nio-3",
    "class":"elk-logger",
    "rest":"test log content"
}

我曾尝试改用%X{X-B3-TraceId:-}和%X{X-B3-SpanId:-}来获取字段,但问题依旧。不确定是否遗漏了相关配置,恳请各位提供解决建议。

解决建议
  • 确认Sleuth依赖是否正确引入
    从线程名reactor-http-nio-3看出是响应式项目,确保已引入spring-cloud-starter-sleuth依赖,且版本与Spring Boot版本匹配,避免版本冲突导致Sleuth无法正常初始化。

  • 检查Sleuth启用状态
    查看application.yml或application.properties,确保没有配置spring.sleuth.enabled=false,默认Sleuth是启用的,若有禁用配置需删除或改为true。

  • 使用Logstash Sleuth扩展编码器
    针对LoggingEventCompositeJsonEncoder,无需手动从MDC取值,直接添加Sleuth专属提供者即可自动注入traceId和spanId:

    <providers>
        <!-- 保留原有pattern等其他提供者 -->
        <pattern>...</pattern>
        <sleuth/>
    </providers>
    

    该配置会自动在JSON日志中添加traceId和spanId字段,无需手动配置%X{traceId}。

  • 响应式场景下确认上下文传递
    WebFlux等响应式环境中,Sleuth上下文通过Reactor的Context传递而非ThreadLocal。如果日志是在脱离请求链路的线程(比如手动创建的线程池)中输出,MDC不会携带traceId/spanId,需确保日志输出代码处于请求处理的Reactor流内。

  • 检查Logback配置加载方式
    确保使用logback-spring.xml作为配置文件名,而非logback.xml。Spring Boot整合Sleuth需要通过Spring上下文初始化MDC相关配置,logback-spring.xml会被Spring优先加载,保证Sleuth的日志上下文生效。

内容的提问来源于stack exchange,提问作者Max Chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:52:26