diff --git a/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java b/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java index 6fa9620..0a9492d 100644 --- a/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java +++ b/src/main/java/cn/axzo/pokonyan/filter/RequestLogHandlerInterceptor.java @@ -6,6 +6,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; @@ -24,8 +25,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); } }