鏈路追蹤

一、單體項(xiàng)目

1.直接使用springboot自帶日志框架

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

2.定義日志攔截器

import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;

public class OcrLogInterceptor implements HandlerInterceptor {
    private static final String TRACE_ID = "TRACE_ID";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String tid = UUID.randomUUID().toString().replaceAll("-", "");
        if (StringUtils.isNotBlank(request.getHeader(TRACE_ID))) {
            tid = request.getHeader(TRACE_ID);
        }
        MDC.put(TRACE_ID, tid);
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
        MDC.remove(TRACE_ID);
    }
    
}

3.將定義的日志攔截器配置到WebMvcConfigurer中,并且指定攔截請求的規(guī)則

import demo.RequestInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 攔截WEB請求
 */
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RequestInterceptor());
    }

}

4.配置 Logback

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg %X{traceId}%n</pattern>
        </encoder>
    </appender>
 
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

在這個(gè)配置文件中,我們定義了一個(gè)控制臺輸出的 appender,并使用 %X{traceId} 來輸出 MDC 中的 traceId。

參考:https://www.cnblogs.com/jingzh/p/17248886.html

二、分布式項(xiàng)目

在Spring Cloud中,可以使用Spring Cloud Sleuth來實(shí)現(xiàn)分布式追蹤。
在pom.xml文件中添加Spring Cloud Sleuth依賴,例如:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

2、配置日志。
在application.properties(或application.yml)文件中,添加以下配置:

spring.sleuth.sampler.probability: 1.0

這將啟用Sleuth并設(shè)置采樣率為100%。

3、 打印日志。
在需要追蹤的代碼中添加日志輸出,例如:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController
public class TestController {

    private static final Logger logger = LoggerFactory.getLogger(TestController.class);

    @GetMapping("/hello")
    public String hello() {
        logger.info("Hello, Sleuth!");
        return "Hello, Sleuth!";
    }
}

4、運(yùn)行應(yīng)用程序。
啟動應(yīng)用程序并觀察日志輸出。Sleuth將為每個(gè)請求生成一個(gè)唯一的跟蹤ID和跟蹤標(biāo)簽,以便跟蹤請求的路徑。

  1. 查看追蹤信息。
    可以使用Zipkin等分布式追蹤系統(tǒng)來查看和分析生成的追蹤信息。通過配置Sleuth將追蹤信息發(fā)送到Zipkin服務(wù)器。

這些是使用Spring Cloud Sleuth進(jìn)行分布式追蹤的基本步驟。您還可以配置更多的參數(shù)來自定義和優(yōu)化追蹤行為。有關(guān)更多詳細(xì)信息,請參閱Spring Cloud Sleuth的官方文檔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容