From ed838e62602c0a63a64ff4bd144a0d16cc9a7cf8 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 10 四月 2026 09:39:25 +0800
Subject: [PATCH] 和客户同步1.0版本

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/log/RequestResponseLoggingFilter.java |   55 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/log/RequestResponseLoggingFilter.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/log/RequestResponseLoggingFilter.java
index 3ea1fdf..c769f2f 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/log/RequestResponseLoggingFilter.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/config/log/RequestResponseLoggingFilter.java
@@ -1,7 +1,9 @@
 package com.xiaopeng.map.config.log;
 
+import com.xiaopeng.common.log.config.LogHeaderProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.Ordered;
 import org.springframework.core.annotation.Order;
 import org.springframework.http.MediaType;
@@ -16,9 +18,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 请求/响应日志过滤器
@@ -28,6 +28,9 @@
 @Component
 @Order(Ordered.HIGHEST_PRECEDENCE + 10)
 public class RequestResponseLoggingFilter extends OncePerRequestFilter {
+
+    @Autowired
+    private LogHeaderProperties logHeaderProperties;
 
     /** 不打印 body 的路径前缀(健康检查、actuator 等) */
     private static final Set<String> EXCLUDE_PATHS = new HashSet<>(Arrays.asList(
@@ -100,12 +103,46 @@
         String method  = request.getMethod();
         String body    = extractBody(request.getContentAsByteArray(), request.getContentType());
 
-        log.info(">>> [{}] {} {}{} | body={}",
-                traceId,
-                method,
-                uri,
-                query != null ? "?" + query : "",
-                body);
+        if (logHeaderProperties.isEnabled()) {
+            String headers = extractHeaders(request);
+            log.info(">>> [{}] {} {}{} | headers={} | body={}",
+                    traceId, method, uri,
+                    query != null ? "?" + query : "",
+                    headers, body);
+        } else {
+            log.info(">>> [{}] {} {}{} | body={}",
+                    traceId, method, uri,
+                    query != null ? "?" + query : "",
+                    body);
+        }
+    }
+
+    private String extractHeaders(HttpServletRequest request) {
+        List<String> names = logHeaderProperties.getNames();
+        StringBuilder sb = new StringBuilder("{");
+        boolean first = true;
+        if (names != null && !names.isEmpty()) {
+            // 只打印配置的请求头
+            for (String name : names) {
+                String value = request.getHeader(name);
+                if (value != null) {
+                    if (!first) sb.append(", ");
+                    first = false;
+                    sb.append(name).append("=").append(value);
+                }
+            }
+        } else {
+            // 未配置则打印全部请求头
+            Enumeration<String> headerNames = request.getHeaderNames();
+            while (headerNames != null && headerNames.hasMoreElements()) {
+                String name = headerNames.nextElement();
+                String value = request.getHeader(name);
+                if (!first) sb.append(", ");
+                first = false;
+                sb.append(name).append("=").append(value);
+            }
+        }
+        return sb.append("}").toString();
     }
 
     private void logResponse(ContentCachingResponseWrapper response, long cost) {

--
Gitblit v1.7.1