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 @@
-
+