woody hai 4 meses
pai
achega
2ae3cf5d7e

+ 57 - 2
framework-base/src/main/java/com/chelvc/framework/base/context/LoggingContextHolder.java

@@ -2,6 +2,7 @@ package com.chelvc.framework.base.context;
 
 import javax.servlet.http.HttpServletRequest;
 
+import ch.qos.logback.classic.Level;
 import com.chelvc.framework.common.model.Platform;
 import com.chelvc.framework.common.model.Terminal;
 import com.chelvc.framework.common.util.ObjectUtils;
@@ -129,6 +130,28 @@ public final class LoggingContextHolder {
         return buffer.toString();
     }
 
+    /**
+     * 获取日志级别
+     *
+     * @param target 目标对象名称
+     * @return 日志级别
+     */
+    public static Level level(@NonNull String target) {
+        String property = LOGGING_LEVEL_PREFIX + target;
+        String level = ApplicationContextHolder.getProperty(property);
+        return StringUtils.ifEmpty(level, Level::toLevel);
+    }
+
+    /**
+     * 获取日志级别
+     *
+     * @param target 目标对象
+     * @return 日志级别
+     */
+    public static Level level(@NonNull Class<?> target) {
+        return level(target.getName());
+    }
+
     /**
      * 打印正常日志
      *
@@ -157,7 +180,22 @@ public final class LoggingContextHolder {
      * @param t      异常对象实例
      */
     public static void warn(@NonNull Logger logger, @NonNull Throwable t) {
-        logger.warn(message(t));
+        warn(logger, t, false);
+    }
+
+    /**
+     * 打印告警日志
+     *
+     * @param logger  日志处理器
+     * @param t       异常对象实例
+     * @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));
+        }
     }
 
     /**
@@ -178,7 +216,24 @@ public final class LoggingContextHolder {
      * @param t       异常对象实例
      */
     public static void warn(@NonNull Logger logger, @NonNull HttpServletRequest request, @NonNull Throwable t) {
-        logger.warn(message(request, t));
+        warn(logger, request, t, false);
+    }
+
+    /**
+     * 打印告警日志
+     *
+     * @param logger  日志处理器
+     * @param request Http请求对象
+     * @param t       异常对象实例
+     * @param tracing 是否打印堆栈
+     */
+    public static void warn(@NonNull Logger logger, @NonNull HttpServletRequest request, @NonNull Throwable t,
+                            boolean tracing) {
+        if (tracing) {
+            logger.warn(message(request, t), t);
+        } else {
+            logger.warn(message(request, t));
+        }
     }
 
     /**

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

@@ -8,6 +8,8 @@ import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.http.entity.ContentType;
+
 /**
  * 请求体缓存处理拦截器实现
  *
@@ -18,6 +20,11 @@ public class BufferedRequestInterceptor implements Filter {
     @Override
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
             throws IOException, ServletException {
-        chain.doFilter(new BufferedRequestWrapper((HttpServletRequest) request), response);
+        String contentType = request.getContentType();
+        if (contentType != null && contentType.contains(ContentType.MULTIPART_FORM_DATA.getMimeType())) {
+            chain.doFilter(request, response);
+        } else {
+            chain.doFilter(new BufferedRequestWrapper((HttpServletRequest) request), response);
+        }
     }
 }

+ 8 - 6
framework-base/src/main/java/com/chelvc/framework/base/interceptor/ControllerLoggingInterceptor.java

@@ -1,5 +1,6 @@
 package com.chelvc.framework.base.interceptor;
 
+import ch.qos.logback.classic.Level;
 import com.chelvc.framework.base.context.LoggingContextHolder;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
@@ -26,19 +27,20 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
 @Order(Ordered.HIGHEST_PRECEDENCE)
 public class ControllerLoggingInterceptor {
     /**
-     * 判断是否可记录日志
+     * 判断是否开启调试日志
      *
      * @param point 接口方法拦截点
      * @return true/false
      */
-    private boolean isPrintable(JoinPoint point) {
+    private boolean isDebug(JoinPoint point) {
         Object target = point.getTarget();
         if (target instanceof ErrorController) {
             return false;
         }
         Signature signature = point.getSignature();
         return signature instanceof MethodSignature
-                && !((MethodSignature) signature).getMethod().isAnnotationPresent(ExceptionHandler.class);
+                && !((MethodSignature) signature).getMethod().isAnnotationPresent(ExceptionHandler.class)
+                && LoggingContextHolder.level(signature.getDeclaringTypeName()) == Level.DEBUG;
     }
 
     /**
@@ -50,12 +52,12 @@ public class ControllerLoggingInterceptor {
     @Around("@within(org.springframework.stereotype.Controller) " +
             "|| @within(org.springframework.web.bind.annotation.RestController)")
     public Object logging(ProceedingJoinPoint point) throws Throwable {
-        boolean printable = this.isPrintable(point);
-        if (printable) {
+        boolean debug = this.isDebug(point);
+        if (debug) {
             LoggingContextHolder.debug(log, point.getArgs());
         }
         Object value = point.proceed();
-        if (printable) {
+        if (debug) {
             LoggingContextHolder.debug(log, value);
         }
         return value;

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

@@ -277,7 +277,8 @@ public class GlobalExceptionInterceptor extends AbstractErrorController implemen
         if (status.is5xxServerError() && !aborted) {
             LoggingContextHolder.error(log, request, e);
         } else {
-            LoggingContextHolder.warn(log, request, e);
+            boolean tracing = ApplicationContextHolder.getProperty("global.warn.tracing", boolean.class, false);
+            LoggingContextHolder.warn(log, request, e, tracing);
         }
         return aborted ? null : result;
     }

+ 1 - 1
framework-database/src/main/java/com/chelvc/framework/database/interceptor/DynamicDatasourceInterceptor.java

@@ -91,7 +91,7 @@ public class DynamicDatasourceInterceptor {
     public Object routing(ProceedingJoinPoint point) throws Throwable {
         DynamicDataSourceContextHolder.push(this.lookupDatasourceKey(point));
         try {
-            return point.proceed(point.getArgs());
+            return point.proceed();
         } finally {
             DynamicDataSourceContextHolder.poll();
         }

+ 2 - 1
framework-nacos/src/main/java/com/chelvc/framework/nacos/config/NacosConfigConfigurer.java

@@ -11,6 +11,7 @@ import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
 import com.alibaba.nacos.spring.context.event.config.NacosConfigReceivedEvent;
 import com.chelvc.framework.base.context.LoggingContextHolder;
 import com.chelvc.framework.common.util.ObjectUtils;
+import com.chelvc.framework.common.util.StringUtils;
 import com.chelvc.framework.nacos.context.NacosContextHolder;
 import com.google.common.collect.Maps;
 import lombok.RequiredArgsConstructor;
@@ -54,7 +55,7 @@ public class NacosConfigConfigurer implements InitializingBean, ApplicationListe
         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
         Logger logger = context.getLogger(name);
         if (logger != null) {
-            logger.setLevel(ObjectUtils.ifNull(level, Level::toLevel));
+            logger.setLevel(StringUtils.ifEmpty(level, Level::toLevel));
         }
     }