|
|
@@ -0,0 +1,36 @@
|
|
|
+package com.qqflow.engine.common.config;
|
|
|
+
|
|
|
+import jakarta.servlet.http.HttpServletRequest;
|
|
|
+import jakarta.servlet.http.HttpServletResponse;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
+
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * HTTP 请求/响应日志拦截器:记录每个请求的 URI、参数和响应状态
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+public class HttpLoggingInterceptor implements HandlerInterceptor {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
|
|
+ String params = request.getParameterMap().isEmpty() ? ""
|
|
|
+ : "?" + request.getParameterMap().entrySet().stream()
|
|
|
+ .map(e -> e.getKey() + "=" + String.join(",", e.getValue()))
|
|
|
+ .collect(Collectors.joining("&"));
|
|
|
+ log.info("[HTTP] {} {}{} | ip={}", request.getMethod(), request.getRequestURI(), params, request.getRemoteAddr());
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
|
|
|
+ Object handler, Exception ex) {
|
|
|
+ int status = response.getStatus();
|
|
|
+ if (status >= 400) {
|
|
|
+ log.warn("[HTTP] {} {} → {}", request.getMethod(), request.getRequestURI(), status);
|
|
|
+ } else {
|
|
|
+ log.info("[HTTP] {} {} → {}", request.getMethod(), request.getRequestURI(), status);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|