为了在应用中的日志正确打印 TraceIdSpanId 参数,我们的日志编程接口需要面向 ) 进行编程,即打印日志的编程接口不要依赖具体的日志实现。

如果是 SOFABoot 或者 Spring Boot 的应用具体的日志实现需要大家去引入,我们推荐的日志打印实现是 Logback 和 Log4j2,不推荐 Log4j,同时日志实现建议只使用一个而不要使用多个实现。

  • Logback 实现引入:
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. </dependency>
  • Log4j2 实现引入:
  1. //引入接口
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. //构造日志打印实例
  5. private static final Logger logger = LoggerFactory.getLogger(XXX.class);

其次,我们为了正确打印 TraceIdSpanId 参数,我们还需要在日志的配置文件中配置 的额外参数,这两个参数是 %X{SOFA-TraceId}%X{SOFA-SpanId},参数值我们均是从 MDC 中获取的值。

Logback 为例配置的 pattern 参数

  • 关键配置项目:[%X{SOFA-TraceId},%X{SOFA-SpanId}] 作为 Logback pattern 的一部分,在对应的 appender 被调用的时候,会根据 pattern 中的占位符替换为当前线程上下文中 TraceId 和 SpanId 的具体值,当前线程中没有对应的 TraceId 和 SpanId 值时,会用“空字符串”替代。
  1. <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p