Quellcode durchsuchen

优化日志处理逻辑

Woody vor 1 Monat
Ursprung
Commit
2a1beaad50

+ 256 - 43
framework-base/src/main/java/com/chelvc/framework/base/context/LoggingContextHolder.java

@@ -29,27 +29,6 @@ public final class LoggingContextHolder {
     private LoggingContextHolder() {
     }
 
-    /**
-     * 获取日志信息
-     *
-     * @param t 异常对象实例
-     * @return 消息内容
-     */
-    public static String message(Throwable t) {
-        return message(SessionContextHolder.getRequest(), t);
-    }
-
-    /**
-     * 获取日志信息
-     *
-     * @param request 请求对象
-     * @param t       异常对象实例
-     * @return 消息内容
-     */
-    public static String message(ServletRequest request, Throwable t) {
-        return message(request, ObjectUtils.ifNull(t, Throwable::getMessage));
-    }
-
     /**
      * 获取日志信息
      *
@@ -105,16 +84,40 @@ public final class LoggingContextHolder {
         return buffer.toString();
     }
 
+    /**
+     * 获取日志信息
+     *
+     * @param request 请求对象
+     * @param t       异常对象实例
+     * @return 消息内容
+     */
+    public static String message(ServletRequest request, Throwable t) {
+        return message(request, true, t);
+    }
+
+    /**
+     * 获取日志信息
+     *
+     * @param request 请求对象
+     * @param embody  是否包含请求体
+     * @param t       异常对象实例
+     * @return 消息内容
+     */
+    public static String message(ServletRequest request, boolean embody, Throwable t) {
+        return message(request, embody, ObjectUtils.ifNull(t, Throwable::getMessage));
+    }
+
     /**
      * 获取日志信息
      *
      * @param request  请求对象
+     * @param embody   是否包含请求体
      * @param messages 消息内容数组
      * @return 消息内容
      */
-    public static String message(ServletRequest request, @NonNull Object... messages) {
+    public static String message(ServletRequest request, boolean embody, @NonNull Object... messages) {
         if (!(request instanceof HttpServletRequest)) {
-            return message((String) null, messages);
+            return message(null, messages);
         }
         StringBuilder endpoint = new StringBuilder();
         endpoint.append(((HttpServletRequest) request).getMethod());
@@ -124,7 +127,7 @@ public final class LoggingContextHolder {
         if (StringUtils.notEmpty(query)) {
             endpoint.append("?").append(query);
         }
-        if (HttpUtils.isBodyType(request) && !HttpUtils.isStreamBody(request)) {
+        if (embody && HttpUtils.isBodyType(request) && !HttpUtils.isStreamBody(request)) {
             String body = HttpUtils.getBody(request);
             if (StringUtils.notEmpty(body)) {
                 endpoint.append(StringUtils.SPACE);
@@ -134,6 +137,54 @@ public final class LoggingContextHolder {
         return message(endpoint.toString(), messages);
     }
 
+    /**
+     * 获取日志信息
+     *
+     * @param logger  日志处理器
+     * @param request 请求对象
+     * @param embody  是否包含请求体
+     * @param t       异常对象实例
+     * @return 消息内容
+     */
+    private static String message(Logger logger, ServletRequest request, boolean embody, Throwable t) {
+        try {
+            return message(request, embody, t);
+        } catch (Exception e) {
+            logger.error("Logging context message build failed", e);
+            return ObjectUtils.ifNull(t, Throwable::getMessage);
+        }
+    }
+
+    /**
+     * 获取日志信息
+     *
+     * @param logger   日志处理器
+     * @param request  请求对象
+     * @param embody   是否包含请求体
+     * @param messages 消息内容数组
+     * @return 消息内容
+     */
+    private static String message(Logger logger, ServletRequest request, boolean embody, Object... messages) {
+        try {
+            return message(request, embody, messages);
+        } catch (Exception e) {
+            logger.error("Logging context message build failed", e);
+            if (ObjectUtils.isEmpty(messages)) {
+                return null;
+            } else if (messages.length == 1) {
+                return StringUtils.toString(messages[0]);
+            }
+            StringBuilder buffer = new StringBuilder();
+            for (Object message : messages) {
+                if (buffer.length() > 0) {
+                    buffer.append(";");
+                }
+                buffer.append(message);
+            }
+            return buffer.toString();
+        }
+    }
+
     /**
      * 获取日志处理器
      *
@@ -145,6 +196,27 @@ public final class LoggingContextHolder {
         return factory instanceof LoggerContext ? ((LoggerContext) factory).exists(name) : factory.getLogger(name);
     }
 
+    /**
+     * 打印正常日志
+     *
+     * @param logger   日志处理器
+     * @param messages 消息数组
+     */
+    public static void info(@NonNull Logger logger, @NonNull Object... messages) {
+        info(logger, true, messages);
+    }
+
+    /**
+     * 打印正常日志
+     *
+     * @param logger   日志处理器
+     * @param embody   是否包含请求体
+     * @param messages 消息数组
+     */
+    public static void info(@NonNull Logger logger, boolean embody, @NonNull Object... messages) {
+        info(logger, SessionContextHolder.getRequest(), embody, messages);
+    }
+
     /**
      * 打印正常日志
      *
@@ -153,7 +225,20 @@ public final class LoggingContextHolder {
      * @param messages 消息数组
      */
     public static void info(@NonNull Logger logger, ServletRequest request, @NonNull Object... messages) {
-        logger.info(message(request, messages));
+        info(logger, request, true, messages);
+    }
+
+    /**
+     * 打印正常日志
+     *
+     * @param logger   日志处理器
+     * @param request  请求对象
+     * @param embody   是否包含请求体
+     * @param messages 消息数组
+     */
+    public static void info(@NonNull Logger logger, ServletRequest request, boolean embody,
+                            @NonNull Object... messages) {
+        logger.info(message(logger, request, embody, messages));
     }
 
     /**
@@ -163,7 +248,18 @@ public final class LoggingContextHolder {
      * @param t      异常对象实例
      */
     public static void warn(@NonNull Logger logger, @NonNull Throwable t) {
-        warn(logger, t, false);
+        warn(logger, true, t);
+    }
+
+    /**
+     * 打印告警日志
+     *
+     * @param logger 日志处理器
+     * @param embody 是否包含请求体
+     * @param t      异常对象实例
+     */
+    public static void warn(@NonNull Logger logger, boolean embody, @NonNull Throwable t) {
+        warn(logger, embody, t, false);
     }
 
     /**
@@ -174,11 +270,19 @@ public final class LoggingContextHolder {
      * @param tracing 是否打印堆栈
      */
     public static void warn(@NonNull Logger logger, @NonNull Throwable t, boolean tracing) {
-        if (tracing) {
-            logger.warn(message(t), t);
-        } else {
-            logger.warn(message(t));
-        }
+        warn(logger, true, t, tracing);
+    }
+
+    /**
+     * 打印告警日志
+     *
+     * @param logger  日志处理器
+     * @param embody  是否包含请求体
+     * @param t       异常对象实例
+     * @param tracing 是否打印堆栈
+     */
+    public static void warn(@NonNull Logger logger, boolean embody, @NonNull Throwable t, boolean tracing) {
+        warn(logger, SessionContextHolder.getRequest(), embody, t, tracing);
     }
 
     /**
@@ -189,7 +293,19 @@ public final class LoggingContextHolder {
      * @param t       异常对象实例
      */
     public static void warn(@NonNull Logger logger, ServletRequest request, @NonNull Throwable t) {
-        warn(logger, request, t, false);
+        warn(logger, request, true, t);
+    }
+
+    /**
+     * 打印告警日志
+     *
+     * @param logger  日志处理器
+     * @param request 请求对象
+     * @param embody  是否包含请求体
+     * @param t       异常对象实例
+     */
+    public static void warn(@NonNull Logger logger, ServletRequest request, boolean embody, @NonNull Throwable t) {
+        warn(logger, request, embody, t, false);
     }
 
     /**
@@ -201,10 +317,24 @@ public final class LoggingContextHolder {
      * @param tracing 是否打印堆栈
      */
     public static void warn(@NonNull Logger logger, ServletRequest request, @NonNull Throwable t, boolean tracing) {
+        warn(logger, request, true, t, tracing);
+    }
+
+    /**
+     * 打印告警日志
+     *
+     * @param logger  日志处理器
+     * @param request 请求对象
+     * @param embody  是否包含请求体
+     * @param t       异常对象实例
+     * @param tracing 是否打印堆栈
+     */
+    public static void warn(@NonNull Logger logger, ServletRequest request, boolean embody, @NonNull Throwable t,
+                            boolean tracing) {
         if (tracing) {
-            logger.warn(message(request, t), t);
+            logger.warn(message(logger, request, embody, t), t);
         } else {
-            logger.warn(message(request, t));
+            logger.warn(message(logger, request, embody, t));
         }
     }
 
@@ -216,7 +346,20 @@ public final class LoggingContextHolder {
      * @param messages 消息数组
      */
     public static void warn(@NonNull Logger logger, ServletRequest request, @NonNull Object... messages) {
-        logger.warn(message(request, messages));
+        warn(logger, request, true, messages);
+    }
+
+    /**
+     * 打印告警日志
+     *
+     * @param logger   日志处理器
+     * @param request  请求对象
+     * @param embody   是否包含请求体
+     * @param messages 消息数组
+     */
+    public static void warn(@NonNull Logger logger, ServletRequest request, boolean embody,
+                            @NonNull Object... messages) {
+        logger.warn(message(logger, request, embody, messages));
     }
 
     /**
@@ -226,7 +369,18 @@ public final class LoggingContextHolder {
      * @param t      异常对象实例
      */
     public static void error(@NonNull Logger logger, @NonNull Throwable t) {
-        logger.error(message(t), t);
+        error(logger, true, t);
+    }
+
+    /**
+     * 打印错误日志
+     *
+     * @param logger 日志处理器
+     * @param embody 是否包含请求体
+     * @param t      异常对象实例
+     */
+    public static void error(@NonNull Logger logger, boolean embody, @NonNull Throwable t) {
+        error(logger, SessionContextHolder.getRequest(), embody, t);
     }
 
     /**
@@ -237,7 +391,19 @@ public final class LoggingContextHolder {
      * @param t       异常对象实例
      */
     public static void error(@NonNull Logger logger, ServletRequest request, @NonNull Throwable t) {
-        logger.error(message(request, t), t);
+        error(logger, request, true, t);
+    }
+
+    /**
+     * 打印错误日志
+     *
+     * @param logger  日志处理器
+     * @param request 请求对象
+     * @param embody  是否包含请求体
+     * @param t       异常对象实例
+     */
+    public static void error(@NonNull Logger logger, ServletRequest request, boolean embody, @NonNull Throwable t) {
+        logger.error(message(logger, request, embody, t), t);
     }
 
     /**
@@ -248,7 +414,20 @@ public final class LoggingContextHolder {
      * @param messages 消息数组
      */
     public static void error(@NonNull Logger logger, ServletRequest request, @NonNull Object... messages) {
-        logger.error(message(request, messages));
+        error(logger, request, true, messages);
+    }
+
+    /**
+     * 打印错误日志
+     *
+     * @param logger   日志处理器
+     * @param request  请求对象
+     * @param embody   是否包含请求体
+     * @param messages 消息数组
+     */
+    public static void error(@NonNull Logger logger, ServletRequest request, boolean embody,
+                             @NonNull Object... messages) {
+        logger.error(message(logger, request, embody, messages));
     }
 
     /**
@@ -258,9 +437,18 @@ public final class LoggingContextHolder {
      * @param t      异常对象实例
      */
     public static void debug(@NonNull Logger logger, @NonNull Throwable t) {
-        if (logger.isDebugEnabled()) {
-            logger.debug(message(t), t);
-        }
+        debug(logger, true, t);
+    }
+
+    /**
+     * 打印调试日志
+     *
+     * @param logger 日志处理器
+     * @param embody 是否包含请求体
+     * @param t      异常对象实例
+     */
+    public static void debug(@NonNull Logger logger, boolean embody, @NonNull Throwable t) {
+        debug(logger, SessionContextHolder.getRequest(), embody, t);
     }
 
     /**
@@ -271,8 +459,20 @@ public final class LoggingContextHolder {
      * @param t       异常对象实例
      */
     public static void debug(@NonNull Logger logger, ServletRequest request, @NonNull Throwable t) {
+        debug(logger, request, true, t);
+    }
+
+    /**
+     * 打印调试日志
+     *
+     * @param logger  日志处理器
+     * @param request 请求对象
+     * @param embody  是否包含请求体
+     * @param t       异常对象实例
+     */
+    public static void debug(@NonNull Logger logger, ServletRequest request, boolean embody, @NonNull Throwable t) {
         if (logger.isDebugEnabled()) {
-            logger.debug(message(request, t), t);
+            logger.debug(message(logger, request, embody, t), t);
         }
     }
 
@@ -284,8 +484,21 @@ public final class LoggingContextHolder {
      * @param messages 消息数组
      */
     public static void debug(@NonNull Logger logger, ServletRequest request, @NonNull Object... messages) {
+        debug(logger, request, true, messages);
+    }
+
+    /**
+     * 打印调试日志
+     *
+     * @param logger   日志处理器
+     * @param request  请求对象
+     * @param embody   是否包含请求体
+     * @param messages 消息数组
+     */
+    public static void debug(@NonNull Logger logger, ServletRequest request, boolean embody,
+                             @NonNull Object... messages) {
         if (logger.isDebugEnabled()) {
-            logger.debug(message(request, messages));
+            logger.debug(message(logger, request, embody, messages));
         }
     }
 }

+ 1 - 1
framework-base/src/main/java/com/chelvc/framework/base/interceptor/GlobalExceptionInterceptor.java

@@ -88,7 +88,7 @@ public class GlobalExceptionInterceptor extends AbstractErrorController implemen
         try {
             chain.doFilter(request, response);
         } catch (Exception e) {
-            LoggingContextHolder.error(log, request, e);
+            LoggingContextHolder.error(log, request, false, e);
         }
     }
 

+ 3 - 5
framework-base/src/main/java/com/chelvc/framework/base/interceptor/RequestCachingInterceptor.java

@@ -173,11 +173,7 @@ public class RequestCachingInterceptor extends OncePerRequestFilter {
                             this.bytes = FileUtils.getBytes(input);
                         }
                     }
-                    if (this.bytes.length == 0) {
-                        this.body = StringUtils.EMPTY;
-                    }
                 } else {
-                    this.body = StringUtils.EMPTY;
                     this.bytes = ObjectUtils.EMPTY_BYTE_ARRAY;
                 }
             }
@@ -189,7 +185,9 @@ public class RequestCachingInterceptor extends OncePerRequestFilter {
          * @return 请求体字符串
          */
         public String getBody() {
-            if (this.body == null) {
+            if (this.bytes.length == 0) {
+                return null;
+            } else if (this.body == null) {
                 this.body = new String(this.bytes);
             }
             return this.body;

+ 6 - 2
framework-base/src/main/java/com/chelvc/framework/base/util/HttpUtils.java

@@ -248,7 +248,7 @@ public final class HttpUtils {
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        return bytes.length == 0 ? StringUtils.EMPTY : new String(bytes);
+        return bytes.length == 0 ? null : new String(bytes);
     }
 
     /**
@@ -457,7 +457,11 @@ public final class HttpUtils {
      * @return 请求参数
      */
     public static String serialize(@NonNull ServletRequest request) {
-        return isJsonBody(request) ? getBody(request) : serialize(request.getParameterMap());
+        if (isJsonBody(request)) {
+            String body = getBody(request);
+            return body == null ? StringUtils.EMPTY : body;
+        }
+        return serialize(request.getParameterMap());
     }
 
     /**