为了在应用中的日志正确打印 TraceId
和 SpanId
参数,我们的日志编程接口需要面向 ) 进行编程,即打印日志的编程接口不要依赖具体的日志实现。
如果是 SOFABoot 或者 Spring Boot 的应用具体的日志实现需要大家去引入,我们推荐的日志打印实现是 Logback 和 Log4j2,不推荐 Log4j,同时日志实现建议只使用一个而不要使用多个实现。
- Logback 实现引入:
<dependency>
<groupId>org.springframework.boot</groupId>
</dependency>
- Log4j2 实现引入:
//引入接口
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//构造日志打印实例
private static final Logger logger = LoggerFactory.getLogger(XXX.class);
其次,我们为了正确打印 TraceId
和 SpanId
参数,我们还需要在日志的配置文件中配置 的额外参数,这两个参数是 %X{SOFA-TraceId}
和 %X{SOFA-SpanId}
,参数值我们均是从 MDC 中获取的值。
- 关键配置项目:
[%X{SOFA-TraceId},%X{SOFA-SpanId}]
作为Logback pattern
的一部分,在对应的appender
被调用的时候,会根据 pattern 中的占位符替换为当前线程上下文中 TraceId 和 SpanId 的具体值,当前线程中没有对应的 TraceId 和 SpanId 值时,会用“空字符串”替代。
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p
: