更新时间:2020-02-18 09:27
SLF4J 提供了 MDC(Mapped Diagnostic Contexts)功能,可以支持用户定义和修改日志的输出格式以及内容。本文将介绍 Tracer 集成的 SLF4J MDC功能,方便用户在只简单修改日志配置文件的前提下输出当前 Tracer 上下文 TraceId
以及 SpanId
。
保证项目中已经引入如下的 Tracer 相关依赖:
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>tracer-core</artifactId>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>tracer-extensions</artifactId>
</dependency>
修改已有的日志配置文件中的 PatternLayout 属性:
<!-- 此为 Tracer MDC 功能展示范例 appender,实际使用时可删除 -->
<appender name="MDC-EXAMPLE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>${logging.level}</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${logging.path}/archtype-test-client/mdc-example.log</file>
<!-- to generate a log file everyday with a longest lasting of 30 days -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- logfile name with daily rolling-->
<FileNamePattern>${logging.path}/archtype-test-client/mdc-example.log.%d{yyyy-MM-dd}</FileNamePattern>
<!-- log perserve days-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--output format:%d is for date,%thread is for thread name,%-5level:loglevel with 5 character %msg:log message,%n line breaker-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %X{SOFA-TraceId} %X{SOFA-SpanId} %logger{50} - %msg%n</pattern>
<!-- encoding -->
<charset>UTF-8</charset>
</encoder>
</appender>
log4j2 示例
<?xml version="1.0" encoding="UTF-8"?> <configuration>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%X{SOFA-TraceId},%X{SOFA-SpanId}] ---- %m%n " />
</Console>
<File name="File" fileName="./logs/test.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%X{SOFA-TraceId},%X{SOFA-SpanId}] ---- %m%n " />
</File>
</Appenders>
<Loggers>
<root level="info">
<AppenderRef ref="CONSOLE" />
<AppenderRef ref="File" />
</root>
</Loggers>
</configuration>
%X{SOFA-TraceId}
和 %X{SOFA-SpanId}
配置:%X{SOFA-TraceId}
:对应 TraceId
,实际运行时将会被替换为当前 Tracer 上下文的 TraceId,如果当前不存在 Tracer 上下文,则会被替换为空字符串。%X{SOFA-SpanId}
:对应 SpanId
,实际运行时将会被替换为当前 Tracer 上下文的 SpanId,如果当前不存在 Tracer 上下文,则会被替换为空字符串。那么在业务代码中,可通过如下命令正常打印日志,不需要额外修改:
logger.info("rest mdc example");
实际输出的日志如下:
2018-02-05 15:52:45.037 [SOFA-REST-WORK-3-1] INFO 0a0fe86f151781716496210012303 0 MDC-EXAMPLE - rest mdc example
在文档使用中是否遇到以下问题
更多建议
匿名提交