diff --git a/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java b/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java index f48c07c..352bc11 100644 --- a/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java +++ b/common-lib/src/main/java/cn/axzo/foundation/util/TraceUtils.java @@ -2,6 +2,7 @@ package cn.axzo.foundation.util; import com.google.common.base.Strings; import lombok.experimental.UtilityClass; +import org.apache.commons.lang3.StringUtils; import org.slf4j.MDC; @UtilityClass @@ -12,27 +13,35 @@ public class TraceUtils { */ public static final String TRACE_ID_IN_MDC = "TraceId"; + /** + * 老服务用的是 ctxLogId,这里兼容一下老服务 + */ + public static final String TRACE_ID_CTX_LOG_ID = "ctxLogId"; + public String getOrCreateTraceId() { - String res = MDC.get(TRACE_ID); + String res = getTraceId(); if (Strings.isNullOrEmpty(res)) { res = UUIDBuilder.generateShortUuid(); MDC.put(TRACE_ID, res); MDC.put(TRACE_ID_IN_MDC, res); + MDC.put(TRACE_ID_CTX_LOG_ID, res); } return res; } public String getTraceId() { - return MDC.get(TRACE_ID); + return StringUtils.firstNonBlank(MDC.get(TRACE_ID_CTX_LOG_ID), MDC.get(TRACE_ID)); } public void putTraceId(String traceId) { MDC.put(TRACE_ID, traceId); MDC.put(TRACE_ID_IN_MDC, traceId); + MDC.put(TRACE_ID_CTX_LOG_ID, traceId); } public void removeTraceId() { MDC.remove(TRACE_ID); MDC.remove(TRACE_ID_IN_MDC); + MDC.remove(TRACE_ID_CTX_LOG_ID); } } diff --git a/web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java b/web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java index ce9142e..59302b8 100644 --- a/web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java +++ b/web-support-lib/src/main/java/cn/axzo/foundation/web/support/interceptors/TraceInterceptor.java @@ -2,6 +2,7 @@ package cn.axzo.foundation.web.support.interceptors; import cn.axzo.foundation.util.TraceUtils; import com.google.common.base.Strings; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; @@ -14,7 +15,7 @@ public class TraceInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String upstreamTraceId = request.getHeader(TraceUtils.TRACE_ID); + String upstreamTraceId = StringUtils.firstNonBlank(request.getHeader(TraceUtils.TRACE_ID_CTX_LOG_ID), request.getHeader(TraceUtils.TRACE_ID)); if (!Strings.isNullOrEmpty(upstreamTraceId)) { // 优先使用上游的 traceId TraceUtils.putTraceId(upstreamTraceId); @@ -22,6 +23,7 @@ public class TraceInterceptor implements HandlerInterceptor { String traceId = TraceUtils.getOrCreateTraceId(); request.setAttribute(TraceUtils.TRACE_ID_IN_MDC, traceId); + request.setAttribute(TraceUtils.TRACE_ID_CTX_LOG_ID, traceId); return true; }