From 5bdbeb940fe034cbe70ece89d5b535ff1ff546f1 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 9 Nov 2023 18:38:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(trace-log):=E5=A2=9E=E5=8A=A0=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=9D=A1=E4=BB=B6=E6=B3=A8=E8=A7=A3=EF=BC=9B=E9=80=82?= =?UTF-8?q?=E9=85=8DtraceId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/RequestLogHandlerInterceptor.java | 4 ++- .../axzo/pokonyan/filter/TraceIdFilter.java | 33 ++++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java b/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java index 8019e1a..5767943 100644 --- a/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java +++ b/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java @@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; @@ -23,8 +24,9 @@ import java.util.Map; * @author tanjie@axzo.cn * @date 2021/12/13 11:13 */ -@Component @Slf4j +@ConditionalOnProperty(prefix = "axzo.log.pokonya", name = "enable", havingValue = "true", matchIfMissing = true) +@Component public class RequestLogHandlerInterceptor implements HandlerInterceptor, WebMvcConfigurer { private static final String SPLIT_EXCLUDE_PARAM = "\\|"; diff --git a/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java b/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java index e779e06..cd42685 100644 --- a/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java +++ b/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java @@ -3,11 +3,13 @@ package cn.axzo.pokonyan.filter; import cn.axzo.pokonyan.util.ExceptionUtil; import cn.axzo.pokonyan.wrapper.BodyReaderHttpServletRequestWrapper; +import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.google.common.base.Strings; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.toolkit.trace.TraceContext; import org.slf4j.MDC; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; @@ -19,17 +21,22 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.UUID; /** * @author TanJ * @date 2021/5/24 */ @Slf4j +@ConditionalOnProperty(prefix = "axzo.log.pokonya", name = "enable", havingValue = "true", matchIfMissing = true) @Component @Order(-99999) public class TraceIdFilter extends OncePerRequestFilter { private static final String TRACE_ID = "traceId"; + private static final String CTX_LOG_ID = "ctxLogId"; + private static final String X_REQUEST_ID = "x-request-id"; + @Override @@ -47,21 +54,29 @@ public class TraceIdFilter extends OncePerRequestFilter { //do - filterChain.doFilter(bodyRequest, response); + try { + filterChain.doFilter(bodyRequest, response); + } finally { + MDC.clear(); + } } private void setTraceId(@Nonnull HttpServletRequest request, @Nonnull HttpServletResponse response) { - request.getParameterMap(); - String traceId = request.getHeader(TRACE_ID); - traceId = StrUtil.isBlank(traceId) ? MDC.get(TRACE_ID) : traceId; - //设置SkyWalking - if (Strings.isNullOrEmpty(traceId)) { - MDC.put(TRACE_ID, TraceContext.traceId()); - response.setHeader(TRACE_ID, MDC.get(TRACE_ID)); - } + //header: ctxLogId -> traceId -> x-request-id + String traceId = StrUtil.blankToDefault(request.getHeader(CTX_LOG_ID), + StrUtil.blankToDefault(request.getHeader(TRACE_ID), + request.getHeader(X_REQUEST_ID))); + //skywalking or new + traceId = StrUtil.blankToDefault(traceId, + StrUtil.blankToDefault(TraceContext.traceId(), + UUID.randomUUID().toString().replaceAll("-", "") )); + //set + MDC.put(TRACE_ID, traceId); + MDC.put(CTX_LOG_ID, traceId); + response.setHeader(TRACE_ID, traceId); } }