news 2026/7/1 23:22:18

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/7/1 16:36:43

宽论框架下量化交易三大工具的协同作战

宽论作为一种科学、系统的交易理念&#xff0c;其量化交易的三大工具 —— 弹论、CDVA 分型以及带鱼短鱼理论&#xff0c;在市场实战中相互配合、协同作战&#xff0c;为投资者构建了一个强大的交易体系。深入探究这三大工具的协同机制&#xff0c;对投资者提升交易水平具有重要…

作者头像 李华
网站建设 2026/6/29 9:18:41

Path of Building:流放之路角色构建的艺术与科学

在《流放之路》这个充满无限可能的游戏世界里&#xff0c;每个玩家都是自己角色的建筑师。而Path of Building&#xff0c;这个被誉为"流放者必备工具"的离线构建工具&#xff0c;正是将这种建筑艺术推向极致的魔法画笔。它不仅仅是一个工具&#xff0c;更是一位懂你…

作者头像 李华
网站建设 2026/6/25 22:29:34

Beyond Compare 5密钥生成技术深度解析:逆向工程与数字签名机制

在软件授权验证领域&#xff0c;Beyond Compare 5作为一款专业的文件对比工具&#xff0c;其授权机制采用了复杂的RSA数字签名技术。本文将从技术原理、安全机制和实现方法三个维度&#xff0c;深入剖析该软件的密钥生成技术。 【免费下载链接】BCompare_Keygen Keygen for BCo…

作者头像 李华
网站建设 2026/7/1 18:47:39

达梦数据库中视图与索引的创建及使用详解

索引&#xff1a;在数据库管理与应用开发过程中&#xff0c;视图和索引是两个非常重要的数据库对象。视图能够简化复杂查询、保障数据安全&#xff0c;索引则可以大幅提升数据查询效率。本文将针对达梦&#xff08;DM&#xff09;数据库&#xff0c;详细介绍视图和索引的概念、…

作者头像 李华
网站建设 2026/6/26 22:31:20

macOS NTFS磁盘读写解决方案:技术实现与操作实践

macOS NTFS磁盘读写解决方案&#xff1a;技术实现与操作实践 【免费下载链接】ntfstool A ntfs tool for mac 项目地址: https://gitcode.com/gh_mirrors/nt/ntfstool 在跨平台数据交换日益频繁的今天&#xff0c;macOS用户面临着一个持续存在的技术挑战&#xff1a;对N…

作者头像 李华