当前位置: 首页 > news >正文

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();}@Overridepublic void execute(Runnable task) {super.execute(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));}@Overridepublic <T> Future<T> submit(Callable<T> task) {return super.submit(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));}@Overridepublic 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()) {@Overrideprotected void beforeExecute(Thread thread, Runnable runnable) {super.beforeExecute(thread, runnable);// 为定时任务生成一个 traceId
                TraceIdUtil.setTraceId();// 可选:添加任务标识System.out.println("Scheduled task starting with traceId: " + TraceIdUtil.getTraceId());}@Overrideprotected void afterExecute(Runnable r, Throwable t) {super.afterExecute(r, t);Threads.printException(r, t);TraceIdUtil.remove();}};}

注:萌新一枚,该博客用于记录所学知识,如有不对的地方,请及时指教,谢谢各位。

2025-10-20 15:46:36

http://www.jsqmd.com/news/17496/

相关文章:

  • 马尔可夫决策过程的理解
  • 2025年试验机厂家权威推荐榜单:拉力试验机,江都试验机,管材环刚度试验机,电子万能试验机,橡胶试验机,压缩试验机及静刚度试验机精选
  • 2025 年球墨铸铁管厂家最新推荐榜:涵盖 K9/C 级供水等多规格,优质厂家选购指南 k9级球墨铸铁管/c25级球墨铸铁管/c30球墨铸铁管/c级球墨铸铁管厂家推荐
  • Cypress 插件实战:让你的测试不再“偶尔掉链子”
  • 2025年掘进机/综掘机厂家权威推荐榜:专业制造与技术实力深度解析,高效掘进设备优选指南
  • 洛谷P2474 [SCOI2008] 天平 题解
  • Telnet发送邮件
  • 一天一款实用的AI工具,第8期,AI转素描风格
  • 2025年预应力张拉设备厂家推荐排行榜,千斤顶,预应力千斤顶,预应力张拉千斤顶,预应力张拉机,锚具,预应力锚具,桥梁施工锚具公司精选
  • 完整教程:【C++】string类
  • 【ACM独立出版|EI稳定】第二届云计算与大数据国际学术会议(ICCBD 2025)
  • 机器学习周报十五 - 教程
  • 完整教程:【LeetCode 每日一题】2221. 数组的三角和
  • 软件设计中的需求分析——白日梦
  • 包装工位连接断开,终检产品无法进入包装
  • 2025年苹果仓厂家权威推荐榜单:苹果仓民宿,移动房苹果仓,出口苹果仓,外贸出口苹果仓,集装箱苹果仓,景区苹果仓,苹果仓房屋,网红苹果仓,可移动式苹果仓公司推荐
  • 实时物化视图的新路径:从传统 Join 到跨源实时查询
  • 2025年拉链厂家权威推荐榜:TAB拉链,大棕拉链,金属/树脂拉链,服装/尼龙拉链,防水/隐形拉链,男装/女装拉链源头精选
  • 多轮对话中,如何判断前后两次提问是否存在依赖关系
  • 基于SpringBoot的课程信息管理系统设计与实现 - 实践
  • 2025年全自动智能点胶机厂家推荐排行榜:饰品/纽扣/拉链头/商标/钥匙扣/五金/徽章视觉定位UV胶点胶设备精选
  • 2025年环氧板厂家推荐排行榜,环氧板加工,FR-4玻纤板,云母板源头厂家专业制造与品质保障
  • 2025 钢制拖链源头厂家最新推荐排行榜:权威甄选优质品牌,破解选型难题助力企业精准采购
  • 机器学习可扩展性:从1到百万用户的架构演进
  • SOSDP
  • 2025年保洁公司推荐排行榜,驻场保洁/钟点保洁/开荒保洁/外包保洁/商场保洁/办公楼保洁/工厂保洁/医院保洁/企业保洁服务优选指南
  • 图像增强任务
  • 20232320 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • spi+dma接收,dma失能后不能使能
  • 2025年锯床厂家权威推荐榜:数控锯床、立式锯床专业选购指南与实力厂家深度解析