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

优化系统日志

zhou-hao 4 éve
szülő
commit
3e6d6c064d

+ 34 - 27
jetlinks-components/logging-component/src/main/java/org/jetlinks/community/logging/logback/SystemLoggingAppender.java

@@ -15,9 +15,7 @@ import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.util.ClassUtils;
 import org.springframework.util.StringUtils;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.StringJoiner;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
 @Slf4j
@@ -37,13 +35,20 @@ public class SystemLoggingAppender extends UnsynchronizedAppenderBase<ILoggingEv
         StackTraceElement element = event.getCallerData()[0];
         IThrowableProxy proxies = event.getThrowableProxy();
         String message = event.getFormattedMessage();
-        String stack = null;
-        if (null != proxies) {
-            int commonFrames = proxies.getCommonFrames();
-            StackTraceElementProxy[] stepArray = proxies.getStackTraceElementProxyArray();
-            StringJoiner joiner = new StringJoiner("\n", message + "\n[", "]");
+        String stack;
+        StringJoiner joiner = new StringJoiner("\n", message + "\n[", "]");
+        Queue<IThrowableProxy> queue = new LinkedList<>();
+        queue.add(proxies);
+        while (queue.size() > 0) {
+            IThrowableProxy proxy = queue.poll();
+            if(proxy==null){
+                break;
+            }
+            int commonFrames = proxy.getCommonFrames();
+            StackTraceElementProxy[] stepArray = proxy.getStackTraceElementProxyArray();
+
             StringBuilder stringBuilder = new StringBuilder();
-            ThrowableProxyUtil.subjoinFirstLine(stringBuilder, proxies);
+            ThrowableProxyUtil.subjoinFirstLine(stringBuilder, proxy);
             joiner.add(stringBuilder);
             for (int i = 0; i < stepArray.length - commonFrames; i++) {
                 StringBuilder sb = new StringBuilder();
@@ -51,9 +56,9 @@ public class SystemLoggingAppender extends UnsynchronizedAppenderBase<ILoggingEv
                 ThrowableProxyUtil.subjoinSTEP(sb, stepArray[i]);
                 joiner.add(sb);
             }
-            stack = joiner.toString();
+            queue.addAll(Arrays.asList(proxy.getSuppressed()));
         }
-
+        stack = joiner.toString();
 
         try {
             String gitLocation = null;
@@ -74,6 +79,7 @@ public class SystemLoggingAppender extends UnsynchronizedAppenderBase<ILoggingEv
                 }
                 mavenModule = moduleInfo.getArtifactId();
             } catch (Exception ignore) {
+
             }
             Map<String, String> context = new HashMap<>(staticContext);
             Map<String, String> mdc = MDC.getCopyOfContextMap();
@@ -81,24 +87,25 @@ public class SystemLoggingAppender extends UnsynchronizedAppenderBase<ILoggingEv
                 context.putAll(mdc);
             }
             SerializableSystemLog info = SerializableSystemLog.builder()
-                    .id(IDGenerator.SNOW_FLAKE_STRING.generate())
-                    .mavenModule(mavenModule)
-                    .context(context)
-                    .name(event.getLoggerName())
-                    .level(event.getLevel().levelStr)
-                    .className(element.getClassName())
-                    .methodName(element.getMethodName())
-                    .lineNumber(element.getLineNumber())
-                    .exceptionStack(stack)
-                    .java(gitLocation)
-                    .threadName(event.getThreadName())
-                    .createTime(event.getTimeStamp())
-                    .message(message)
-                    .threadId(String.valueOf(Thread.currentThread().getId()))
-                    .build();
+                .id(IDGenerator.SNOW_FLAKE_STRING.generate())
+                .mavenModule(mavenModule)
+                .context(context)
+                .name(event.getLoggerName())
+                .level(event.getLevel().levelStr)
+                .className(element.getClassName())
+                .methodName(element.getMethodName())
+                .lineNumber(element.getLineNumber())
+                .exceptionStack(stack)
+                .java(gitLocation)
+                .threadName(event.getThreadName())
+                .createTime(event.getTimeStamp())
+                .message(message)
+                .threadId(String.valueOf(Thread.currentThread().getId()))
+                .build();
             try {
                 publisher.publishEvent(info);
-            }catch (Exception ignore){}
+            } catch (Exception ignore) {
+            }
         } catch (Exception e) {
             log.error("组装系统日志错误", e);
         }