|
|
@@ -0,0 +1,72 @@
|
|
|
+package com.nb.framework.logback;
|
|
|
+
|
|
|
+import ch.qos.logback.classic.spi.ILoggingEvent;
|
|
|
+import ch.qos.logback.classic.spi.IThrowableProxy;
|
|
|
+import ch.qos.logback.classic.spi.StackTraceElementProxy;
|
|
|
+import ch.qos.logback.classic.spi.ThrowableProxyUtil;
|
|
|
+import ch.qos.logback.core.CoreConstants;
|
|
|
+import ch.qos.logback.core.UnsynchronizedAppenderBase;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import com.nb.system.entity.SysRunningLog;
|
|
|
+import com.nb.system.mapper.SysRunningLogMapper;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.context.ApplicationContext;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+public class SystemLoggingAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
|
|
|
+
|
|
|
+ private SysRunningLogMapper logMapper=null;
|
|
|
+ @Override
|
|
|
+ protected void append(ILoggingEvent event) {
|
|
|
+ if(logMapper==null){
|
|
|
+ ApplicationContext applicationContext = SpringUtil.getApplicationContext();
|
|
|
+ logMapper= SpringUtil.getBean(SysRunningLogMapper.class);
|
|
|
+ }
|
|
|
+ if(logMapper==null){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ StackTraceElement element = event.getCallerData()[0];
|
|
|
+ IThrowableProxy proxies = event.getThrowableProxy();
|
|
|
+ String message = event.getFormattedMessage();
|
|
|
+ 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, proxy);
|
|
|
+ joiner.add(stringBuilder);
|
|
|
+ for (int i = 0; i < stepArray.length - commonFrames; i++) {
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.append(CoreConstants.TAB);
|
|
|
+ ThrowableProxyUtil.subjoinSTEP(sb, stepArray[i]);
|
|
|
+ joiner.add(sb);
|
|
|
+ }
|
|
|
+ queue.addAll(Arrays.asList(proxy.getSuppressed()));
|
|
|
+ }
|
|
|
+ stack = joiner.toString();
|
|
|
+
|
|
|
+
|
|
|
+ SysRunningLog info = SysRunningLog.builder()
|
|
|
+ .name(event.getLoggerName())
|
|
|
+ .level(event.getLevel().levelStr)
|
|
|
+ .className(element.getClassName())
|
|
|
+ .methodName(element.getMethodName())
|
|
|
+ .lineNumber(element.getLineNumber())
|
|
|
+ .exceptionStack(stack)
|
|
|
+ .threadName(event.getThreadName())
|
|
|
+ .message(message)
|
|
|
+ .threadId(String.valueOf(Thread.currentThread().getId()))
|
|
|
+ .build();
|
|
|
+ logMapper.insert(info);
|
|
|
+ }
|
|
|
+}
|