Springboot接口日志加入鏈路追蹤traceId方式
更新時(shí)間:2025年08月15日 09:38:17 作者:Geek-SX
文章介紹通過(guò)添加依賴、配置logback-spring.xml、使用@LogTrace注解和LogTraceAspect切面實(shí)現(xiàn)請(qǐng)求日志追蹤,測(cè)試時(shí)日志中可顯示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";
/**
* 定義切點(diǎn) 切點(diǎn)為
*/
@Pointcut("@within(com.bt.springboot.common.annotation.LogTrace)")
public void printLog(){
}
/**
* 環(huán)繞通知
*/
@Around(value = "printLog()")
public Object webLogAround(ProceedingJoinPoint joinPoint) throws Throwable {
// 方法執(zhí)行前加上鏈路號(hào)
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>:對(duì)日志進(jìn)行格式化。
<target>:字符串System.out(默認(rèn))或者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.測(cè)試 在類或方法上加上注解@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");
}
}
- 發(fā)送請(qǐng)求 日志可查看到traceId

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java 垃圾回收機(jī)制以及經(jīng)典垃圾回收器詳解
這篇文章主要介紹了java 垃圾回收機(jī)制以及經(jīng)典垃圾回收器詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
MyBatis?Generator生成數(shù)據(jù)庫(kù)模型實(shí)現(xiàn)示例
這篇文章主要為大家介紹了MyBatis?Generator生成數(shù)據(jù)庫(kù)模型實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Java?@Scheduled定時(shí)任務(wù)不執(zhí)行解決辦法
這篇文章主要給大家介紹了關(guān)于Java?@Scheduled定時(shí)任務(wù)不執(zhí)行解決的相關(guān)資料,當(dāng)@Scheduled定時(shí)任務(wù)不執(zhí)行時(shí)可以根據(jù)以下步驟進(jìn)行排查和解決,需要的朋友可以參考下2023-10-10
SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔
在多人協(xié)作的開(kāi)發(fā)過(guò)程中,API文檔不僅可以減少等待,也能保證開(kāi)發(fā)的持續(xù)進(jìn)行,這篇文章主要給大家介紹了關(guān)于SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔的相關(guān)資料,需要的朋友可以參考下2021-07-07
idea開(kāi)啟mybatis控制臺(tái)SQL日志打印的代碼示例
本文主要介紹了idea開(kāi)啟mybatis控制臺(tái)SQL日志打印的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
詳解Spring Data JPA系列之投影(Projection)的用法
本篇文章主要介紹了詳解Spring Data JPA系列之投影(Projection)的用法,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07

