spring boot 日志配置traceId,实现全链路日志追踪
在Spring Boot中实现日志追踪traceId
的配置,可以通过自定义日志配置文件或者使用AOP来为每个请求生成并追踪唯一的traceId
。以下是一个使用AOP实现的简单示例:
- 添加依赖(如果使用Spring Boot 2.x,则不需要额外添加):
<!-- AOP依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 创建一个切面来为每个请求生成
traceId
:
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import java.util.UUID;
@Aspect
@Component
public class LoggingAspect {
private static final String TRACE_ID = "traceId";
@Pointcut("execution(public * com.yourpackage..*.*(..))")
public void loggingPointcut() {
}
@Before("loggingPointcut()")
public void logBefore(JoinPoint joinPoint) {
String traceId = MDC.get(TRACE_ID);
if (traceId == null) {
traceId = UUID.randomUUID().toString();
MDC.put(TRACE_ID, traceId);
}
// 可以在这里添加额外的日志信息,例如方法签名等
}
}
- 配置日志格式,在
application.properties
或application.yml
中添加以下内容:
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %X{traceId} - %-5level %logger{36} - %msg%n
在这个配置中,%X{traceId}
占位符会被替换为当前日志请求的traceId
。
确保你的日志配置文件(如logback-spring.xml)包含了对应的pattern。
这样,每当有日志记录时,都会附带上生成的traceId
,实现了全链路追踪。
评论已关闭