Skywalking tid注入方法
log4j2
pom中引入以下依赖
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
<version>6.4.0</version>
</dependency>
springboot log4j2 日志依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2.xml加入以下配置
<Properties>
<Property name="log.layout">%d{ISO8601} | %traceId | %-5.5p | %X{logtype} | %t | %X{codeline} | %l | %X{dealid} | %X{errorno} | %m%n</Property>
</Properties>
<Appenders>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="${log.layout}"/>
</Appender>
</Appenders>
log4j
应用的日志框架中引入以下依赖
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-1.x</artifactId>
<version>6.4.0</version>
</dependency>
springboot 1.2.6.RELEASE 版本以上的版本log4j日志依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
springboot 1.2.6.RELEASE 版本以下的版本log4j日志依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
替换log4j.properties中的配置
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %c | %n | %n%m%n
log4j.appender.stdout.layout=org.apache.skywalking.apm.toolkit.log.log4j.v1.x.TraceIdPatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %T | %c | %n | %n%m%n
logback
pom中引入以下依赖
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>6.4.0</version>
</dependency>
springboot logback 日志依赖,使用的是spring-boot-starter-logging
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
替换logback.xml中配置
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{ISO8601} | %thread | %-5level | %msg%n</pattern>
</encoder>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<pattern>%d{ISO8601} | %tid | %thread | %-5level | %msg%n</pattern>
</layout>
</encoder>
日志链路测试代码
@Configuration
public class TestLog implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(TestLog.class);
@Override
public void run(String... strings) throws Exception {
logtest();
}
public void logtest(){
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
start();
}catch ( Exception e ){
logger.error("log TID is error{}",e);
}
}},1, 1, TimeUnit.SECONDS);
}
@Trace(operationName = "/log/traceId")
public String getTraceId(){
try {
return TraceContext.traceId();
} catch (Exception e) {
logger.error("skywalking agent is not mount");
}
return "TID: N/A" ;
}
@Trace(operationName = "/log/date")
public String getNowDate(String str){
logger.info("{} get date, traceId: {}",str,getTraceId());
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
@Trace(operationName = "/log/start")
public void start(){
logger.info("start log now is {}",getNowDate("START"));
running();
}
@Trace(operationName = "/log/running")
public void running(){
logger.info("running log now is {}",getNowDate("RUNNING"));
waiting();
}
@Trace(operationName = "/log/waiting")
public void waiting(){
logger.info("waiting log now is {}",getNowDate("WAITING"));
ending();
}
@Trace(operationName = "/log/ending")
public void ending(){
logger.info("ending log now is {}",getNowDate("ENDING"));
}
}
效果图
2020-10-30T08:59:26,104 | INFO | | main | TID: N/A | | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) | | | Initializing ProtocolHandler ["http-nio-8702"]
2020-10-30T08:59:26,104 | INFO | | main | TID: N/A | | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) | | | Starting ProtocolHandler ["http-nio-8702"]
2020-10-30T08:59:26,104 | INFO | | main | TID: N/A | | org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:179) | | | Using a shared selector for servlet write/read
2020-10-30T08:59:26,164 | INFO | | main | TID: N/A | | org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:201) | | | Tomcat started on port(s): 8702 (http)
2020-10-30T08:59:26,174 | INFO | | main | TID: N/A | | org.springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:57) | | | Started Log4j2ApplicationMain in 6.29 seconds (JVM running for 12.174)
2020-10-30T08:59:27,274 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) | | | START get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,289 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.start$original$zRJZN24M(TestLog.java:61) | | | start log now is 2020-10-30 08:59:27
2020-10-30T08:59:27,289 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) | | | RUNNING get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,289 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.running$original$zRJZN24M(TestLog.java:67) | | | running log now is 2020-10-30 08:59:27
2020-10-30T08:59:27,289 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) | | | WAITING get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,289 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.waiting$original$zRJZN24M(TestLog.java:73) | | | waiting log now is 2020-10-30 08:59:27
2020-10-30T08:59:27,289 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.getNowDate$original$zRJZN24M(TestLog.java:55) | | | ENDING get date, traceId: 214.69.16040195672290001
2020-10-30T08:59:27,294 | INFO | | pool-6-thread-1 | TID: 214.69.16040195672290001 | | com.newland.core.server.TestLog.ending$original$zRJZN24M(TestLog.java:79) | | | ending log now is 2020-10-30 08:59:27