全链路日志追踪实战指南
在微服务架构盛行的今天,一个前端请求往往会经过多个后端服务的协作处理。当系统出现故障或性能瓶颈时,如何在成千上万条杂乱的日志中,快速定位到贯穿整个调用链的那条'线索',成为了每个开发者必须面对的难题。
一、痛点:没有链路追踪的日子
在没有集成链路追踪之前,我们排查问题的流程通常是这样的:
- 用户反馈'下单失败'。
- 运维同学登录网关服务器,根据时间或用户 ID grep 日志,找到了网关报错时间点。
- 发现网关调用了订单服务,再登录订单服务机器 grep 日志。
- 发现订单服务调用了库存服务,继续登录库存服务机器…
- 整个过程不仅耗时,而且容易因为日志时间不同步、线程池切换等问题导致线索中断。
核心问题在于:缺少一个贯穿所有服务的唯一标识。
二、trace-spring-boot-starter 简介
trace-spring-boot-starter 是一个基于 Spring Boot 开发的日志追踪组件。它的核心设计理念是无侵入和开箱即用。
它主要解决了以下问题:
- 自动生成 TraceId:为每一个 HTTP 请求自动生成唯一的链路 ID。
- 全链路透传:在服务间调用(如 RestTemplate、OpenFeign)时,自动将 TraceId 透传到下游服务。
- 日志自动集成:无需修改现有日志代码,自动将 TraceId 填充到 MDC(Mapped Diagnostic Context)中,配合 Logback/Log4j2 直接打印。
- 线程池支持:解决了异步调用或线程池场景下 TraceId 丢失的问题。
三、快速开始
1. 引入依赖
首先,在你的 Spring Boot 项目中引入该 starter(具体版本请参考官方仓库的最新 Release):
<dependency>
<groupId>com.common.trace.core</groupId>
<artifactId>trace-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
2. 配置日志格式
这是最关键的一步。你需要在 logback-spring.xml 或 logback.xml 中,在日志输出格式里添加 %X{traceId} 占位符。
<configuration>
<appender name="CONSOLE" =>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n


