feat(log): 添加traceId

This commit is contained in:
黄斌峰
2026-08-10 07:31:46 +08:00
parent 667bf66489
commit 2a1b90c6cb
10 changed files with 81 additions and 16 deletions
@@ -30,6 +30,7 @@ import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springblade.core.log.utils.LogTraceUtil;
import org.springblade.core.tool.utils.StringUtil;
/**
* 为异步方法添加traceId
@@ -45,11 +46,17 @@ public class LogTraceAspect {
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
boolean clean = false;
try {
LogTraceUtil.insert();
if (StringUtil.isBlank(LogTraceUtil.getTraceIdFromMDC())) {
LogTraceUtil.insert();
clean = true;
}
return point.proceed();
} finally {
LogTraceUtil.remove();
if (clean) {
LogTraceUtil.remove();
}
}
}
}
@@ -25,9 +25,13 @@
*/
package org.springblade.core.log.filter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springblade.core.log.utils.LogTraceUtil;
import jakarta.servlet.*;
import org.springblade.core.tool.constant.BladeConstant;
import java.io.IOException;
/**
@@ -43,13 +47,18 @@ public class LogTraceFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
boolean flag = LogTraceUtil.insert();
String traceId = null;
if (request instanceof HttpServletRequest httpServletRequest) {
traceId = httpServletRequest.getHeader(BladeConstant.TRACE_ID_HEADER);
}
traceId = LogTraceUtil.insert(traceId);
try {
if (response instanceof HttpServletResponse httpServletResponse) {
httpServletResponse.addHeader(BladeConstant.TRACE_ID_HEADER, traceId);
}
chain.doFilter(request, response);
} finally {
if (flag) {
LogTraceUtil.remove();
}
LogTraceUtil.remove();
}
}
@@ -26,6 +26,7 @@
package org.springblade.core.log.utils;
import org.slf4j.MDC;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.utils.StringUtil;
/**
@@ -34,7 +35,6 @@ import org.springblade.core.tool.utils.StringUtil;
* @author Chill
*/
public class LogTraceUtil {
private static final String UNIQUE_ID = "traceId";
/**
* 获取日志追踪id格式
@@ -43,23 +43,39 @@ public class LogTraceUtil {
return StringUtil.randomUUID();
}
/**
* 从mdc获取日志追踪id
* @return
*/
public static String getTraceIdFromMDC() {
return MDC.get(BladeConstant.MDC_TRACE_ID_KEY);
}
/**
* 插入traceId
*/
public static boolean insert() {
MDC.put(UNIQUE_ID, getTraceId());
return true;
public static String insert() {
return LogTraceUtil.insert(null);
}
/**
* 移除traceId
*/
public static boolean remove() {
MDC.remove(UNIQUE_ID);
MDC.remove(BladeConstant.MDC_TRACE_ID_KEY);
return true;
}
public static String getTraceIdFromMDC() {
return MDC.get(UNIQUE_ID);
/**
* 插入traceId
* @param traceId
* @return
*/
public static String insert(String traceId) {
if (traceId == null) {
traceId = getTraceId();
}
MDC.put(BladeConstant.MDC_TRACE_ID_KEY, traceId);
return traceId;
}
}
@@ -10,7 +10,7 @@
<conversionRule conversionWord="wEx" class="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr([%X{traceId:-N/A}]){yellow} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
@@ -10,7 +10,7 @@
<conversionRule conversionWord="wEx" class="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr([%X{traceId:-N/A}]){yellow} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
@@ -10,7 +10,7 @@
<conversionRule conversionWord="wEx" class="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr([%X{traceId:-N/A}]){yellow} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">