feat: 增加traceId

原因
    增加traceId

修改
    增加traceId
This commit is contained in:
zengxiaobo 2024-07-15 17:34:57 +08:00
parent 13f75f41b7
commit 44d73ab360
3 changed files with 36 additions and 1 deletions

View File

@ -6,7 +6,7 @@ import org.slf4j.MDC;
@UtilityClass
public class TraceUtils {
public static final String TRACE_ID = "axzo-trace-id";
public static final String TRACE_ID = "traceId";
/**
* 多设置一个key = TraceId, value为traceId的变量到MDC. 以兼容目前的logback-spring.xml的配置
*/

View File

@ -7,6 +7,7 @@ import cn.axzo.foundation.web.support.exception.AbstractExceptionHandler;
import cn.axzo.foundation.web.support.interceptors.CallerAppInterceptor;
import cn.axzo.foundation.web.support.interceptors.PrettyPrintInterceptor;
import cn.axzo.foundation.web.support.interceptors.PrintVerboseInterceptor;
import cn.axzo.foundation.web.support.interceptors.TraceInterceptor;
import cn.axzo.foundation.web.support.resolvers.AxContextResolver;
import cn.axzo.foundation.web.support.resolvers.CallerAppResolver;
import com.alibaba.fastjson.JSONArray;
@ -187,6 +188,7 @@ public class DefaultWebMvcConfig extends DelegatingWebMvcConfiguration implement
registry.addInterceptor(new CorsInterceptor(corsProcessorType));
registry.addInterceptor(new PrettyPrintInterceptor());
registry.addInterceptor(new CallerAppInterceptor(appRuntime));
registry.addInterceptor(new TraceInterceptor());
super.addInterceptors(registry);

View File

@ -0,0 +1,33 @@
package cn.axzo.foundation.web.support.interceptors;
import cn.axzo.foundation.util.TraceUtils;
import com.google.common.base.Strings;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 在request上下文中添加 traceId
*/
public class TraceInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String upstreamTraceId = request.getHeader(TraceUtils.TRACE_ID);
if (!Strings.isNullOrEmpty(upstreamTraceId)) {
// 优先使用上游的 traceId
TraceUtils.putTraceId(upstreamTraceId);
}
String traceId = TraceUtils.getOrCreateTraceId();
request.setAttribute(TraceUtils.TRACE_ID_IN_MDC, traceId);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
TraceUtils.removeTraceId();
}
}