Forráskód Böngészése

优化系统日志处理逻辑;

Woody 1 hónapja
szülő
commit
a8d3ad44ce

+ 1 - 0
framework-base/src/main/java/com/chelvc/framework/base/context/LoggingContextHolder.java

@@ -84,6 +84,7 @@ public final class LoggingContextHolder {
         Terminal terminal = ObjectUtils.ifNull(session, Session::getTerminal);
         String version = ObjectUtils.ifNull(session, Session::getVersion);
         Long timestamp = ObjectUtils.ifNull(session, Session::getTimestamp);
+        parameter = StringUtils.replace(parameter, '\n', ' ');
         String request = Stream.of(method, uri, parameter).filter(StringUtils::notEmpty)
                 .collect(Collectors.joining(StringUtils.SPACE));
         StringBuilder buffer = new StringBuilder("[");

+ 28 - 13
framework-base/src/main/java/com/chelvc/framework/base/interceptor/ControllerAccessInterceptor.java

@@ -1,14 +1,16 @@
 package com.chelvc.framework.base.interceptor;
 
-import com.chelvc.framework.base.context.ApplicationContextHolder;
+import ch.qos.logback.classic.LoggerContext;
 import com.chelvc.framework.base.context.LoggingContextHolder;
 import com.chelvc.framework.base.context.SessionContextHolder;
+import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.Signature;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.ILoggerFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.web.servlet.error.ErrorController;
@@ -23,25 +25,34 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
  * @author Woody
  * @date 2024/1/30
  */
+@Slf4j
 @Aspect
 @Component
 @Order(Ordered.HIGHEST_PRECEDENCE)
 public class ControllerAccessInterceptor {
     /**
-     * 判断是否开启调试日志
+     * 获取接口方法Logger实例
      *
      * @param point 接口方法拦截点
-     * @return true/false
+     * @return Logger实例
      */
-    private boolean isDebug(JoinPoint point) {
-        Object target = point.getTarget();
-        if (target instanceof ErrorController
-                || !ApplicationContextHolder.getProperty("controller.debug.enabled", boolean.class, false)) {
-            return false;
+    private Logger getLogger(JoinPoint point) {
+        // 排除ErrorController接口
+        if (point.getTarget() instanceof ErrorController) {
+            return null;
         }
+
+        // 排除@ExceptionHandler注解方法
         Signature signature = point.getSignature();
-        return signature instanceof MethodSignature
-                && !((MethodSignature) signature).getMethod().isAnnotationPresent(ExceptionHandler.class);
+        if (signature instanceof MethodSignature
+                && ((MethodSignature) signature).getMethod().isAnnotationPresent(ExceptionHandler.class)) {
+            return null;
+        }
+
+        // 获取Logger实例
+        ILoggerFactory factory = LoggerFactory.getILoggerFactory();
+        String name = signature.getDeclaringTypeName() + "." + signature.getName();
+        return factory instanceof LoggerContext ? ((LoggerContext) factory).exists(name) : factory.getLogger(name);
     }
 
     /**
@@ -54,9 +65,13 @@ public class ControllerAccessInterceptor {
             "|| @within(org.springframework.web.bind.annotation.RestController)")
     public Object logging(ProceedingJoinPoint point) throws Throwable {
         Object value = point.proceed();
-        if (this.isDebug(point)) {
-            Logger logger = LoggerFactory.getLogger(point.getSignature().getDeclaringTypeName());
-            LoggingContextHolder.debug(logger, SessionContextHolder.getRequest(), value);
+        try {
+            Logger logger = this.getLogger(point);
+            if (logger != null) {
+                LoggingContextHolder.debug(logger, SessionContextHolder.getRequest(), value);
+            }
+        } catch (Exception e) {
+            log.error("Controller access logging failed", e);
         }
         return value;
     }

+ 3 - 6
framework-nacos/src/main/java/com/chelvc/framework/nacos/config/NacosConfigConfigurer.java

@@ -4,8 +4,6 @@ import java.util.Map;
 import java.util.Objects;
 
 import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.Logger;
-import ch.qos.logback.classic.LoggerContext;
 import com.alibaba.nacos.api.common.Constants;
 import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
 import com.alibaba.nacos.spring.context.event.config.NacosConfigReceivedEvent;
@@ -52,10 +50,9 @@ public class NacosConfigConfigurer implements InitializingBean, ApplicationListe
             return;
         }
         name = name.substring(LoggingContextHolder.LOGGING_LEVEL_PREFIX.length());
-        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
-        Logger logger = context.getLogger(name);
-        if (logger != null) {
-            logger.setLevel(StringUtils.ifEmpty(level, Level::toLevel));
+        org.slf4j.Logger logger = LoggerFactory.getLogger(name);
+        if (logger instanceof ch.qos.logback.classic.Logger) {
+            ((ch.qos.logback.classic.Logger) logger).setLevel(StringUtils.ifEmpty(level, Level::toLevel));
         }
     }