From 5bdbeb940fe034cbe70ece89d5b535ff1ff546f1 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 9 Nov 2023 18:38:36 +0800 Subject: [PATCH 1/3] =?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); } } From 1af1cecccae40c9e64def1e55efce888817c0be0 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 13 Nov 2023 10:12:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(trace-log):=E4=B8=8D=E4=BE=9D=E8=B5=96?= =?UTF-8?q?skywalking?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/pokonyan/filter/TraceIdFilter.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java b/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java index cd42685..c753062 100644 --- a/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java +++ b/src/main/java/cn/axzo/pokonyan/filter/TraceIdFilter.java @@ -3,11 +3,8 @@ 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; @@ -19,7 +16,6 @@ import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import java.io.IOException; import java.util.UUID; @@ -69,10 +65,8 @@ public class TraceIdFilter extends OncePerRequestFilter { 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("-", "") )); + // blank to new + traceId = StrUtil.blankToDefault(traceId, UUID.randomUUID().toString().replaceAll("-", "")); //set MDC.put(TRACE_ID, traceId); MDC.put(CTX_LOG_ID, traceId); From 674637e2d0649bca61715dba73649596561a90c2 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 13 Nov 2023 15:56:53 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(trace-log):=20trace=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E4=BC=A0=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/pokonyan/util/TraceSupplier.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/cn/axzo/pokonyan/util/TraceSupplier.java diff --git a/src/main/java/cn/axzo/pokonyan/util/TraceSupplier.java b/src/main/java/cn/axzo/pokonyan/util/TraceSupplier.java new file mode 100644 index 0000000..eb69dfa --- /dev/null +++ b/src/main/java/cn/axzo/pokonyan/util/TraceSupplier.java @@ -0,0 +1,42 @@ +package cn.axzo.pokonyan.util; + +import org.slf4j.MDC; + +import java.util.function.Supplier; + +/** + * 封装Supplier + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/11/13 15:47 + */ +public class TraceSupplier implements Supplier { + + private static final String CTX_LOG_ID = "ctxLogId"; + + private String traceId; + + private Supplier supplier; + + private TraceSupplier() {} + + + @Override + public T get() { + MDC.put(CTX_LOG_ID, this.traceId); + try { + return supplier.get(); + } finally { + MDC.remove(CTX_LOG_ID); + } + } + + public static TraceSupplier create(Supplier supplier) { + TraceSupplier traceSupplier = new TraceSupplier<>(); + traceSupplier.supplier = supplier; + traceSupplier.traceId = MDC.get(CTX_LOG_ID); + return traceSupplier; + } + +}