Merge branch 'feature/REQ-1359' into dev

This commit is contained in:
zhansihu 2023-11-09 18:39:08 +08:00
commit 6a3ba35db3
2 changed files with 27 additions and 10 deletions

View File

@ -6,6 +6,7 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
@ -24,8 +25,9 @@ import java.util.Map;
* @author tanjie@axzo.cn * @author tanjie@axzo.cn
* @date 2021/12/13 11:13 * @date 2021/12/13 11:13
*/ */
@Component
@Slf4j @Slf4j
@ConditionalOnProperty(prefix = "axzo.log.pokonya", name = "enable", havingValue = "true", matchIfMissing = true)
@Component
public class RequestLogHandlerInterceptor implements HandlerInterceptor, WebMvcConfigurer { public class RequestLogHandlerInterceptor implements HandlerInterceptor, WebMvcConfigurer {
private static final String SPLIT_EXCLUDE_PARAM = "\\|"; private static final String SPLIT_EXCLUDE_PARAM = "\\|";

View File

@ -3,11 +3,13 @@ package cn.axzo.pokonyan.filter;
import cn.axzo.pokonyan.util.ExceptionUtil; import cn.axzo.pokonyan.util.ExceptionUtil;
import cn.axzo.pokonyan.wrapper.BodyReaderHttpServletRequestWrapper; import cn.axzo.pokonyan.wrapper.BodyReaderHttpServletRequestWrapper;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.toolkit.trace.TraceContext; import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
@ -19,17 +21,22 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.UUID;
/** /**
* @author TanJ * @author TanJ
* @date 2021/5/24 * @date 2021/5/24
*/ */
@Slf4j @Slf4j
@ConditionalOnProperty(prefix = "axzo.log.pokonya", name = "enable", havingValue = "true", matchIfMissing = true)
@Component @Component
@Order(-99999) @Order(-99999)
public class TraceIdFilter extends OncePerRequestFilter { public class TraceIdFilter extends OncePerRequestFilter {
private static final String TRACE_ID = "traceId"; 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 @Override
@ -47,21 +54,29 @@ public class TraceIdFilter extends OncePerRequestFilter {
//do //do
filterChain.doFilter(bodyRequest, response); try {
filterChain.doFilter(bodyRequest, response);
} finally {
MDC.clear();
}
} }
private void setTraceId(@Nonnull HttpServletRequest request, private void setTraceId(@Nonnull HttpServletRequest request,
@Nonnull HttpServletResponse response) { @Nonnull HttpServletResponse response) {
request.getParameterMap(); //header: ctxLogId -> traceId -> x-request-id
String traceId = request.getHeader(TRACE_ID); String traceId = StrUtil.blankToDefault(request.getHeader(CTX_LOG_ID),
traceId = StrUtil.isBlank(traceId) ? MDC.get(TRACE_ID) : traceId; StrUtil.blankToDefault(request.getHeader(TRACE_ID),
//设置SkyWalking request.getHeader(X_REQUEST_ID)));
if (Strings.isNullOrEmpty(traceId)) { //skywalking or new
MDC.put(TRACE_ID, TraceContext.traceId()); traceId = StrUtil.blankToDefault(traceId,
response.setHeader(TRACE_ID, MDC.get(TRACE_ID)); 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);
} }
} }