最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用TraceId實現(xiàn)日志鏈路追蹤的步驟

 更新時間:2025年10月21日 08:45:01   作者:碼農(nóng)小周  
本文介紹了如何實現(xiàn)服務(wù)調(diào)用的日志鏈路追蹤,包括整合logback打印traceId、配置日志文件、通過MDC傳遞追蹤ID,并重寫線程池方法以保證異步和定時任務(wù)線程的traceId傳遞,實現(xiàn)高效日志查找和追蹤,感興趣的朋友跟隨小編一起看看吧
  • 業(yè)務(wù)需求

  保證一次服務(wù)調(diào)用,在業(yè)務(wù)中可以一次追查到本次服務(wù)調(diào)用涉及的本地服務(wù)方法,第三方服務(wù)接口。實現(xiàn)日志的鏈路追蹤。保證日志的高查找性。

  • 實現(xiàn)步驟

1、pom.xml 依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>
    <!--lombok配置-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>
</dependencies>

2、整合logback,打印日志,logback.xml (日志配置文件)

關(guān)鍵代碼:[traceId:%X{traceId}],traceId是通過攔截器里MDC.put(traceId, tid)添加。

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--日志存儲路徑-->
    <property name="log" value="D:/test/log" />
    <!-- 控制臺輸出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--輸出格式化-->
            <pattern>[traceId:%X{traceId}]  %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按天生成日志文件 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件名-->
            <FileNamePattern>${log}/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--保留天數(shù)-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[traceId:%X{traceId}]  %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- 日志輸出級別 -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>
</configuration>

3、application.yml指定logback.xml配置目錄

logging:
  config: classpath:logback.xml

4、異步線程的跟蹤ID鏈路追蹤

業(yè)務(wù)邏輯是基于線程數(shù)據(jù)的傳遞進(jìn)行處理,主線程傳遞線程ID到子線程。處理方式:重寫線程池的execute(*)、submit(*)方法。

public final class MyThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
    public MyThreadPoolTaskExecutor() {
        super();
    }
    @Override
    public void execute(Runnable task) {
        super.execute(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));
    }
    @Override
    public <T> Future<T> submit(Callable<T> task) {
        return super.submit(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));
    }
    @Override
    public Future<?> submit(Runnable task) {
        return super.submit(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));
    }
}

4、異步定時任務(wù)線程接口ScheduledExecutorService的日志鏈路追蹤。在執(zhí)行前,執(zhí)行后進(jìn)行跟蹤ID的生成和刪除。

@Bean(name = "scheduledExecutorService")
    protected ScheduledExecutorService scheduledExecutorService() {
        return new ScheduledThreadPoolExecutor(corePoolSize,
                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
                new ThreadPoolExecutor.CallerRunsPolicy()) {
            @Override
            protected void beforeExecute(Thread thread, Runnable runnable) {
                super.beforeExecute(thread, runnable);
                // 為定時任務(wù)生成一個 traceId
                TraceIdUtil.setTraceId();
                // 可選:添加任務(wù)標(biāo)識
                System.out.println("Scheduled task starting with traceId: " + TraceIdUtil.getTraceId());
            }
            @Override
            protected void afterExecute(Runnable r, Throwable t) {
                super.afterExecute(r, t);
                Threads.printException(r, t);
                TraceIdUtil.remove();
            }
        };
    }

到此這篇關(guān)于SpringBoot使用TraceId日志鏈路追蹤的文章就介紹到這了,更多相關(guān)SpringBoot TraceId日志鏈路追蹤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java方法重載和方法重寫的區(qū)別到底在哪?

    Java方法重載和方法重寫的區(qū)別到底在哪?

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java方法重載和方法重寫的區(qū)別到底在哪展開,文中有非常詳細(xì)的解釋,需要的朋友可以參考下
    2021-06-06
  • spring @profile注解的使用方法

    spring @profile注解的使用方法

    本篇文章主要介紹了spring @profile注解的使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 微信小程序獲取手機(jī)號的完整實例(Java后臺實現(xiàn))

    微信小程序獲取手機(jī)號的完整實例(Java后臺實現(xiàn))

    我們在做小程序開發(fā)的過程中,經(jīng)常會涉及到用戶身份的問題,最普遍的就是我們要獲取用戶的手機(jī)號碼,下面這篇文章主要給大家介紹了關(guān)于微信小程序獲取手機(jī)號的完整實例,后臺由Java實現(xiàn),需要的朋友可以參考下
    2022-06-06
  • 基于Springboot2.0構(gòu)建ES的多客戶端

    基于Springboot2.0構(gòu)建ES的多客戶端

    這篇文章主要為大家詳細(xì)介紹了基于Springboot2.0構(gòu)建ES的多客戶端,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java畢業(yè)設(shè)計實戰(zhàn)項目之在線服裝銷售商城系統(tǒng)的實現(xiàn)流程

    Java畢業(yè)設(shè)計實戰(zhàn)項目之在線服裝銷售商城系統(tǒng)的實現(xiàn)流程

    基礎(chǔ)掌握怎么樣,用實戰(zhàn)檢驗就知道了,本篇文章手把手帶你用java+SpringBoot+Maven+Vue+mysql實現(xiàn)一個在線服裝銷售商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • java 如何使用org.w3c.dom操作XML文件

    java 如何使用org.w3c.dom操作XML文件

    這篇文章主要介紹了java 如何使用org.w3c.dom操作XML文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • RabbitMQ的消息確認(rèn)機(jī)制的詳細(xì)總結(jié)

    RabbitMQ的消息確認(rèn)機(jī)制的詳細(xì)總結(jié)

    RabbitMQ消息確認(rèn)機(jī)制指的是在消息傳遞過程中,發(fā)送方發(fā)送消息后,接收方需要對消息進(jìn)行確認(rèn),以確保消息被正確地接收和處理,本文就講給大家詳解介紹RabbitMQ的幾種消息確認(rèn)機(jī)制,需要的朋友可以參考下
    2023-07-07
  • Java System類從基礎(chǔ)到實戰(zhàn)的進(jìn)階指南

    Java System類從基礎(chǔ)到實戰(zhàn)的進(jìn)階指南

    Java System類是Java與操作系統(tǒng)交互的核心,提供流操作、數(shù)組復(fù)制、時間處理等基礎(chǔ)功能,JDK8優(yōu)化性能并引入高精度時間API,實戰(zhàn)中需注意避免濫用gc()和currentTimeMillis(),本文將從版本演進(jìn)到實戰(zhàn)應(yīng)用,全面剖析System類的奧秘,感興趣的朋友一起看看吧
    2025-07-07
  • Java獲取任意http網(wǎng)頁源代碼的方法

    Java獲取任意http網(wǎng)頁源代碼的方法

    這篇文章主要介紹了Java獲取任意http網(wǎng)頁源代碼的方法,可實現(xiàn)獲取網(wǎng)頁代碼以及去除HTML標(biāo)簽的代碼功能,涉及Java正則操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • SpringBoot中的@DependsOn注解詳解

    SpringBoot中的@DependsOn注解詳解

    這篇文章主要介紹了SpringBoot中的@DependsOn注解詳解,
    2023-08-08

最新評論

通许县| 太仆寺旗| 彰化县| 苗栗市| 浦北县| 芜湖县| 和政县| 亚东县| 顺平县| 惠州市| 周宁县| 罗田县| 吉隆县| 武威市| 霞浦县| 长沙市| 潼南县| 浪卡子县| 历史| 金坛市| 铜鼓县| 长丰县| 禹城市| 大邑县| 娄底市| 常宁市| 平顶山市| 阳谷县| 伊吾县| 五台县| 山丹县| 郁南县| 湘乡市| 鄢陵县| 韶关市| 祁东县| 林口县| 四平市| 福建省| 泰来县| 防城港市|