Springboot接口日志加入链路追踪traceId方式
作者:Geek-SX
文章介绍通过添加依赖、配置logback-spring.xml、使用@LogTrace注解和LogTraceAspect切面实现请求日志追踪,测试时日志中可显示traceId
Springboot接口日志加入链路追踪traceId
1.注解 LogTrace
package com.bt.springboot.common.annotation; import java.lang.annotation.*; /** * 链路追踪 * * @author */ @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface LogTrace { }
2.切面 LogTraceAspect
package com.bt.springboot.common.aspect; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.MDC; import org.springframework.stereotype.Component; import java.util.UUID; /** * 链路追踪 * * @author */ @Aspect @Component @Slf4j public class LogTraceAspect { /** * 与 logback-spring.xml 中的变量一致 */ private static final String TRACE_ID = "traceId"; /** * 定义切点 切点为 */ @Pointcut("@within(com.bt.springboot.common.annotation.LogTrace)") public void printLog(){ } /** * 环绕通知 */ @Around(value = "printLog()") public Object webLogAround(ProceedingJoinPoint joinPoint) throws Throwable { // 方法执行前加上链路号 String traceId = UUID.randomUUID().toString().replaceAll("-", ""); MDC.put(TRACE_ID, traceId); Object proceed = joinPoint.proceed(); MDC.remove(TRACE_ID); return proceed; } }
3.添加依赖
<!-- 链路追踪 --> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.0.1</version> </dependency>
4.修改logback-spring.xml
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <!-- <encoder>:对日志进行格式化。 <target>:字符串System.out(默认)或者System.err --> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%-5level] %logger{50} - %msg%n</pattern> </layout> </encoder> </appender>
5.测试 在类或方法上加上注解@LogTrace
package com.bt.springboot.web.controller; import com.bt.springboot.common.annotation.LogTrace; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; /** * @author zkx * @Date 2022/4/8 11:36 */ @LogTrace @Slf4j @RestController public class TestController { @GetMapping("/test") public void test(){ log.info("info"); } }
- 发送请求 日志可查看到traceId
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。