news 2026/6/14 19:18:21

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/14 23:14:32

使用盗版wordpress主题的后果很严重

今天一个使用avada主题的老板&#xff0c;网站上出现了”wordpress avada主题可能包含与WordPress菜单系统不兼容的代码”自己完全不懂技术&#xff0c;网站也没有专业的技术人员维护&#xff0c;当初只是买了个盗版的avada主题就把网站给建起来了。虽然当初买盗版avada主题的没…

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

离轴反射平行光管在红外相机中的作用

在安防监控的深夜巡逻、医疗诊断的体温筛查、航天遥感的地表探测中&#xff0c;红外波段相机始终扮演着“透视眼”的角色。而这双“眼睛”能否精准捕捉目标&#xff0c;核心在于镜头的调校精度——微小的光轴偏移或成像畸变&#xff0c;都可能让红外影像失真&#xff0c;错失关…

作者头像 李华
网站建设 2026/6/15 12:53:15

基于Java的线上学习预警系统-计算机毕设项目源代码+设计说明书+PPT

摘 要 在信息化时代的浪潮下&#xff0c;高等教育正面临着教学方法和管理手段的双重变革。为了更加高效、准确地掌握学生的学习动态&#xff0c;及时发现和解决学业问题&#xff0c;本文设计并实现了一个线上学习预警系统。该系统整合了课程信息、课程作业、作业提交、课程成绩…

作者头像 李华
网站建设 2026/6/15 2:00:32

15、网络安全监测与操作系统指纹识别技术解析

网络安全监测与操作系统指纹识别技术解析 在网络安全领域,保障系统免受各种攻击和威胁至关重要。本文将详细介绍网络安全监测工具 psad 的功能,包括其对多种异常流量的检测机制、签名更新方法,以及操作系统指纹识别的相关技术。 1. psad 异常流量检测 psad 是一款强大的网…

作者头像 李华
网站建设 2026/6/15 1:11:44

AutoHotkey终极键盘布局切换指南:告别繁琐输入法切换

AutoHotkey终极键盘布局切换指南&#xff1a;告别繁琐输入法切换 【免费下载链接】AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/autohotke/AutoHotkey 还在为频繁切换中英文输入法而烦恼吗&#xff1f;写代码时中英文符号混输导致语法错误&#xff1f;开会时…

作者头像 李华
网站建设 2026/6/15 12:39:24

20、Snort规则选项与iptables数据包过滤详解

Snort规则选项与iptables数据包过滤详解 在网络安全领域,Snort规则选项和iptables数据包过滤是保障网络安全的重要手段。下面将详细介绍相关内容。 1. LAND攻击与系统漏洞 早期的Windows NT 4.0和Windows 95等系统,在处理特定类型的数据包时存在严重问题,可能会因完全崩溃…

作者头像 李华