diff --git a/src/main/java/com/inspect/nvr/config/TraceIdFilter.java b/src/main/java/com/inspect/nvr/config/TraceIdFilter.java new file mode 100644 index 0000000..5ea5f9a --- /dev/null +++ b/src/main/java/com/inspect/nvr/config/TraceIdFilter.java @@ -0,0 +1,42 @@ +package com.inspect.nvr.config; + +import org.slf4j.MDC; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.UUID; + +/** + * 用于在每个请求中生成或传递traceId,方便日志追踪 + */ +@Component +public class TraceIdFilter implements Filter { + private static final String TRACE_ID = "traceId"; + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; + // 1.优先从请求头中获取traceId + String traceId = httpServletRequest.getHeader(TRACE_ID); + // 2.若请求头中没有traceId,则生成新的traceId + if (traceId == null || traceId.isEmpty()) { + traceId = generateTraceId(); + } + + try { + // 3.将traceId放入MDC中 + MDC.put(TRACE_ID, traceId); + // 4.继续处理请求 + filterChain.doFilter(servletRequest, servletResponse); + } finally { + // 5.处理完成,清除MDC中的traceId(避免线程复用污染) + MDC.clear(); + } + } + + private String generateTraceId() { + return UUID.randomUUID().toString().replace("-", ""); + } +} diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 8b63258..ff7b7aa 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -9,7 +9,7 @@ - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{traceId}] %logger{80} - %msg%n diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 1484479..d8ee8b7 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -3,7 +3,7 @@ - +