news 2026/5/9 8:40:43

SpringBoot使用TraceId日志链路追踪

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot使用TraceId日志链路追踪

一次服务调用,在业务中可以一次追查到本次服务调用涉及的本地服务方法,第三方服务接口。实现日志的链路追踪。保证日志的高查找性。

实现步骤

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 (日志配置文件)

关键代码:[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>

<!--保留天数-->

<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链路追踪

业务逻辑是基于线程数据的传递进行处理,主线程传递线程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、异步定时任务线程接口ScheduledExecutorService的日志链路追踪。在执行前,执行后进行跟踪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);

// 为定时任务生成一个 traceId

TraceIdUtil.setTraceId();

// 可选:添加任务标识

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();

}

};

}

复制代码

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 19:20:40

vue环境配置教程

一、前言&#xff08;重构价值定位 读者收益承诺&#xff09; ✅ 适配版本&#xff08;2024.10 实测无坑&#xff09;&#xff1a;Node.js 16.20.2 LTS&#xff08;稳定王者&#xff09;/ 18.19.0 LTS&#xff08;Vite 5.x 最优解&#xff09;、Vue CLI 5.0.8、Vite 5.1.4、V…

作者头像 李华
网站建设 2026/5/2 3:28:43

48tools开源工具集:开发者必备的48种效率神器完全指南

48tools开源工具集&#xff1a;开发者必备的48种效率神器完全指南 【免费下载链接】48tools 48工具&#xff0c;提供公演、口袋48直播录源&#xff0c;公演、口袋48录播下载&#xff0c;封面下载&#xff0c;B站直播抓取&#xff0c;B站视频下载&#xff0c;A站直播抓取&#x…

作者头像 李华
网站建设 2026/4/24 5:56:25

字节跳动开源Academic-DS-9B:90亿参数打造英文学术大模型新标杆

字节跳动开源Academic-DS-9B&#xff1a;90亿参数打造英文学术大模型新标杆 【免费下载链接】academic-ds-9B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/academic-ds-9B 导语 字节跳动正式开源90亿参数英文学术专用大模型Academic-DS-9B&#xff0…

作者头像 李华
网站建设 2026/4/30 14:02:35

国产数据库技术深度解析:从自主可控到云原生生态的突破之路

目录 引言&#xff1a;国产数据库的崛起背景与技术定位核心技术架构与创新突破 2.1 分布式关系型数据库&#xff1a;突破传统架构瓶颈2.2 云原生数据库&#xff1a;从 “上云” 到 “生于云”2.3 多模与 AI 原生数据库&#xff1a;技术融合的创新典范2.4 隐私计算与数据安全技…

作者头像 李华
网站建设 2026/5/4 20:28:40

一个优惠券,解决上门按摩平台引流、成交、复购难题!

一、为什么说传统的上门按摩系统的优惠券&#xff0c;就是一个垃圾功能&#xff01;它既带不来客户下单&#xff0c;更不能绑定老客户&#xff01;而且发的越多&#xff0c;亏的越多&#xff01;因为&#xff0c;你不知道&#xff0c;这些优惠券提高了多少个新用户的注册&#…

作者头像 李华