news 2026/6/16 18:34:51

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/6/15 13:12:23

Double Take人脸识别系统:一站式多引擎解决方案终极指南

Double Take人脸识别系统&#xff1a;一站式多引擎解决方案终极指南 【免费下载链接】double-take Unified UI and API for processing and training images for facial recognition. 项目地址: https://gitcode.com/gh_mirrors/dou/double-take 在人工智能技术飞速发展…

作者头像 李华
网站建设 2026/6/16 6:23:57

XGW-9000系列高端新能源电站边缘网关技术可行性分析报告V2

目录 项目概况与分析框架 一、硬件架构技术可行性分析 1.1 核心处理器选型与性能评估 1.2 国密加密芯片技术评估 1.3 工业级组件集成分析 二、软件架构与系统设计可行性分析 2.1 操作系统选型与实时性支持 2.2 容器化部署技术评估 2.3 系统启动优化方案 三、通信协议…

作者头像 李华
网站建设 2026/6/15 5:29:49

Obsidian科研笔记模板:打造高效科研工作流的终极指南

Obsidian科研笔记模板&#xff1a;打造高效科研工作流的终极指南 【免费下载链接】obsidian_vault_template_for_researcher This is an vault template for researchers using obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian_vault_template_for_research…

作者头像 李华
网站建设 2026/6/15 15:48:20

ModernWMS仓库管理系统高效部署实操指南

ModernWMS仓库管理系统高效部署实操指南 【免费下载链接】ModernWMS The open source simple and complete warehouse management system is derived from our many years of experience in implementing erp projects. We stripped the original commercial system wms functi…

作者头像 李华
网站建设 2026/6/15 21:08:46

Temporal 技术调研报告

一、技术概述1.1 定义与核心定位Temporal 是一款开源的分布式工作流编排平台&#xff0c;核心定位是解决分布式系统中 “复杂异步流程的可靠执行” 问题。它基于 “持久化工作流” 理念&#xff0c;将业务流程抽象为可中断、可恢复、可追溯的工作流实例&#xff0c;屏蔽分布式环…

作者头像 李华
网站建设 2026/6/13 2:14:49

一课一得:SQL 视图与索引的学习总结

一、目录学习背景&#xff1a;为什么学视图与索引&#xff1f;知识点 1&#xff1a;SQL 视图 —— 从 “复杂查询” 到 “一键复用”知识点 2&#xff1a;SQL 索引 —— 让查询 “飞” 起来的优化工具我的优秀项目&#xff1a;多场景视图 索引的联动实践踩坑实录&#xff1a;从…

作者头像 李华