服务之间需要追踪是哪个请求,可以使用sleuth
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
logback.xml 配置
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="./jpush-product/logs"/> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(%X{X-B3-TraceId:-}) %clr(---){faint} %clr([%15.15t]){faint} %clr(%logger){cyan} %clr(-){faint} %m%n%wEx"/> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出,%d:日期;%thread:线程名;%-5level:级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符--> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>--> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <!-- 设置字符集 --> <charset>UTF-8</charset> </encoder> </appender> <!-- 系统INFO日志 --> <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/info.log</file> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level><!-- 打印INFO及以上级别(INFO,WARN,ERROR) --> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <fileNamePattern>${LOG_HOME}/info.log.%d{yyyy-MM-dd}.log</fileNamePattern> <!--日志文件保留天数--> <maxHistory>10</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出,%d:日期;%thread:线程名;%-5level:级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{X-B3-TraceId:-} - %X{X-B3-SpanId:-} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <logger name="com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver" level="DEBUG"/> <!-- 日志模块输出 --> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="INFO_LOG" /> </root> </configuration>
原理
Slf4jScopeDecorator 设置线程上下文
feign 调度时会将threadlocal 信息填充到header中