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

Spring Sleuth+Log4j2无法打印spanExportable/X-Span-Export日志字段

问题原因
  • 你当前的Spring Sleuth与Log4j2集成本身是正常的,能输出traceId、spanId就说明MDC上下文注入的基础配置没有问题。
  • Spring Cloud Sleuth在2.x及之后的版本中,默认关闭了Span导出标识的MDC注入,不会把spanExportable或X-Span-Export字段写入MDC,因此你打印全量MDC时看不到这两个属性,对应配置的日志pattern自然也无法输出对应值。
  • 你尝试的两个pattern键名对应不同Sleuth旧版本的导出标识key:spanExportable是Sleuth 1.x版本使用的MDC键名,X-Span-Export是Sleuth 2.x早期小版本使用的键名,新版本默认都不会注入这两个字段。
  • 该字段默认关闭注入的原因是:Span Exportable本质是标记当前Span是否会被上报到链路收集端(如Zipkin、Jaeger)的采样标识,绝大多数场景下日志排查只需要traceId、spanId做链路关联即可,不需要额外输出采样标记,默认关闭可以减少MDC的冗余内容。
解决方案
  • 开启导出标识的MDC注入配置
    在项目的application.yml或application.properties中添加如下配置,显式开启Span导出状态的MDC注入:
    spring:
      sleuth:
        log:
          slf4j:
            mdc:
              span-exportable-enabled: true
    
    配置生效后,Sleuth会自动将spanExportable字段写入MDC,值为true/false对应当前Span是否会被采样上报,此时日志pattern中使用%X{spanExportable}即可正常打印该标识。
  • 高版本适配注意
    如果你使用的是Spring Cloud 2021.0.0之后的版本(对应Sleuth 3.1.x及以上),如果开启上述配置后仍无法打印,可以先临时配置%X打印全量MDC,确认当前版本实际注入的导出标识键名,再调整日志pattern中的键名即可。
  • 非必要场景可以跳过配置
    如果你的日志输出核心需求是做链路日志关联,不需要判断单条Span的采样上报状态,完全可以不用配置该字段,保留traceId、spanId的输出即可满足绝大多数链路排查需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:57:19