szjbdgzl 2 лет назад
Родитель
Сommit
7f19642703

+ 11 - 20
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/aop/FlowDBLogAspect.java

@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
 import com.lc.ibps.base.web.context.ContextUtil;
 import com.lc.ibps.cloud.utils.RequestUtil;
 import com.lc.ibps.sysdata.dao.UpdateDataTableDao;
+import com.lc.ibps.untils.LogAopUtil;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -48,29 +49,19 @@ public class FlowDBLogAspect {
     @Around("execution(* com.lc.ibps.bpmn.api.*.*(..))")
     public Object around(ProceedingJoinPoint point) throws Throwable {
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
-        // 执行目标方法
         StopWatch stopWatch = new StopWatch();
         stopWatch.start();
-        Object result = point.proceed();
-        stopWatch.stop();
-
+        Object result = null;
+        try {
+            result = point.proceed();
+        } catch (Throwable throwable) {
+            updateDataTableDao.insertLog(LogAopUtil.logError(request, point, throwable));
+            throw throwable;
+        } finally {
+            stopWatch.stop();
+        }
         if (NAMES.contains(request.getRequestURI())){
-            List<Object> paramList = Stream.of(point.getArgs())
-                    .filter(args -> !(args instanceof ServletRequest))
-                    .filter(args -> !(args instanceof ServletResponse))
-                    .collect(Collectors.toList());
-            String printParamStr = paramList.size() == 1 ? JSONUtil.toJsonStr(paramList.get(0)) : JSONUtil.toJsonStr(paramList);
-            // 记录操作日志
-            Map<String,Object> map = new HashMap<>();
-            map.put("method_", point.getSignature().getName());
-            map.put("params_", printParamStr);
-            map.put("user_id_", ContextUtil.getCurrentUser().getUserId());
-            map.put("user_name_", ContextUtil.getCurrentUser().getFullname());
-            map.put("time_", stopWatch.getTotalTimeMillis());
-            map.put("ip_", RequestUtil.getIpAddr(request));
-            map.put("response_", JSONUtil.toJsonStr(result));
-            map.put("uri_", request.getRequestURI());
-            updateDataTableDao.insertLog(map);
+            updateDataTableDao.insertLog(LogAopUtil.log( request, point, result, stopWatch));
         }
         return result;
     }

+ 11 - 31
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/aop/IDataTemplateMsgAop.java

@@ -1,10 +1,8 @@
 package com.lc.ibps.aop;
 
 import cn.hutool.core.date.StopWatch;
-import cn.hutool.json.JSONUtil;
-import com.lc.ibps.base.web.context.ContextUtil;
-import com.lc.ibps.cloud.utils.RequestUtil;
 import com.lc.ibps.sysdata.dao.UpdateDataTableDao;
+import com.lc.ibps.untils.LogAopUtil;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -13,15 +11,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import java.util.Objects;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 @Aspect
 @Component
@@ -35,31 +26,20 @@ public class IDataTemplateMsgAop {
     @Around("execution(* com.lc.ibps.form.api.IDataTemplateMgrService.*(..))")
     public Object around(ProceedingJoinPoint point) throws Throwable {
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
-        // 执行目标方法
         StopWatch stopWatch = new StopWatch();
         stopWatch.start();
-        Object result = point.proceed();
-        stopWatch.stop();
-
+        Object result = null;
+        try {
+            result = point.proceed();
+        } catch (Throwable throwable) {
+            updateDataTableDao.insertLog(LogAopUtil.logError(request, point, throwable));
+            throw throwable;
+        } finally {
+            stopWatch.stop();
+        }
         if ("removeFormData".equals(point.getSignature().getName())){
-            List<Object> paramList = Stream.of(point.getArgs())
-                    .filter(args -> !(args instanceof ServletRequest))
-                    .filter(args -> !(args instanceof ServletResponse))
-                    .collect(Collectors.toList());
-            String printParamStr = paramList.size() == 1 ? JSONUtil.toJsonStr(paramList.get(0)) : JSONUtil.toJsonStr(paramList);
-            // 记录操作日志
-            Map<String,Object> map = new HashMap<>();
-            map.put("method_", point.getSignature().getName());
-            map.put("params_", printParamStr);
-            map.put("user_id_", ContextUtil.getCurrentUser().getUserId());
-            map.put("user_name_", ContextUtil.getCurrentUser().getFullname());
-            map.put("time_", stopWatch.getTotalTimeMillis());
-            map.put("ip_", RequestUtil.getIpAddr(request));
-            map.put("response_", JSONUtil.toJsonStr(result));
-            map.put("uri_", request.getRequestURI());
-            updateDataTableDao.insertLog(map);
+            updateDataTableDao.insertLog(LogAopUtil.log( request, point, result, stopWatch));
         }
         return result;
     }
-
 }

+ 16 - 30
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/aop/UpdateDBLogAspect.java

@@ -1,10 +1,8 @@
 package com.lc.ibps.aop;
 
 import cn.hutool.core.date.StopWatch;
-import cn.hutool.json.JSONUtil;
-import com.lc.ibps.base.web.context.ContextUtil;
-import com.lc.ibps.cloud.utils.RequestUtil;
 import com.lc.ibps.sysdata.dao.UpdateDataTableDao;
+import com.lc.ibps.untils.LogAopUtil;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -13,12 +11,10 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import java.io.StringWriter;
+import java.util.Arrays;
+import java.util.Objects;
 
 
 @Aspect
@@ -35,29 +31,19 @@ public class UpdateDBLogAspect {
     @Around("execution(* com.lc.ibps.sysdata.controller.UpdateDataTableController.*(..))")
     public Object around(ProceedingJoinPoint point) throws Throwable {
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
-        String methodName = point.getSignature().getName();
-        // 执行目标方法
         StopWatch stopWatch = new StopWatch();
         stopWatch.start();
-        Object result = point.proceed();
-        stopWatch.stop();
-        if (ifAddLog(methodName)){
-            List<Object> paramList = Stream.of(point.getArgs())
-                    .filter(args -> !(args instanceof ServletRequest))
-                    .filter(args -> !(args instanceof ServletResponse))
-                    .collect(Collectors.toList());
-            String printParamStr = paramList.size() == 1 ? JSONUtil.toJsonStr(paramList.get(0)) : JSONUtil.toJsonStr(paramList);
-            // 记录操作日志
-            Map<String,Object> map = new HashMap<>();
-            map.put("method_", methodName);
-            map.put("params_", printParamStr);
-            map.put("user_id_", ContextUtil.getCurrentUser().getUserId());
-            map.put("user_name_", ContextUtil.getCurrentUser().getFullname());
-            map.put("time_", stopWatch.getTotalTimeMillis());
-            map.put("ip_", RequestUtil.getIpAddr(request));
-            map.put("response_", JSONUtil.toJsonStr(result));
-            map.put("uri_", request.getRequestURI());
-            updateDataTableDao.insertLog(map);
+        Object result = null;
+        try {
+            result = point.proceed();
+        } catch (Throwable throwable) {
+            updateDataTableDao.insertLog(LogAopUtil.logError(request, point, throwable));
+            throw throwable;
+        } finally {
+            stopWatch.stop();
+        }
+        if (ifAddLog(point.getSignature().getName())){
+            updateDataTableDao.insertLog(LogAopUtil.log( request, point, result, stopWatch));
         }
         return result;
     }
@@ -65,7 +51,7 @@ public class UpdateDBLogAspect {
     public boolean ifAddLog(String methodName){
         String[] names = {"addDataContextTable","updateDataContextTable","updatesDatasContextTable",
                           "updatesBatchContextTable","batchDelete","deleteDataContextTable"};
-        return Arrays.stream(names).anyMatch(s -> s.equals(methodName));
+        return Arrays.asList(names).contains(methodName);
     }
 
 }

+ 65 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/untils/LogAopUtil.java

@@ -0,0 +1,65 @@
+package com.lc.ibps.untils;
+
+import cn.hutool.core.date.StopWatch;
+import cn.hutool.json.JSONUtil;
+import com.lc.ibps.base.web.context.ContextUtil;
+import com.lc.ibps.cloud.utils.RequestUtil;
+import org.aspectj.lang.ProceedingJoinPoint;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @author gaozl
+ */
+public class LogAopUtil {
+
+
+    public static String filterParam(Object[] pointArgs){
+        List<Object> paramList = Stream.of(pointArgs)
+                .filter(args -> !(args instanceof ServletRequest))
+                .filter(args -> !(args instanceof ServletResponse))
+                .collect(Collectors.toList());
+        return paramList.size() == 1 ? JSONUtil.toJsonStr(paramList.get(0)) : JSONUtil.toJsonStr(paramList);
+    }
+
+    public static Map<String,Object> log(HttpServletRequest request, ProceedingJoinPoint point,Object result, StopWatch stopWatch) {
+        Map<String,Object> map = new HashMap<>();
+        map.put("method_", point.getSignature().getName());
+        map.put("params_", filterParam(point.getArgs()));
+        map.put("user_id_", ContextUtil.getCurrentUser().getUserId());
+        map.put("user_name_", ContextUtil.getCurrentUser().getFullname());
+        map.put("time_", stopWatch.getTotalTimeMillis());
+        map.put("ip_", RequestUtil.getIpAddr(request));
+        map.put("response_", JSONUtil.toJsonStr(result));
+        map.put("uri_", request.getRequestURI());
+        map.put("type_", "正常日志");
+        return map;
+    }
+
+    public static Map<String,Object> logError(HttpServletRequest request, ProceedingJoinPoint point, Throwable throwable) {
+        // 记录操作日志
+        Map<String,Object> map = new HashMap<>();
+        map.put("method_", point.getSignature().getName());
+        map.put("params_", filterParam(point.getArgs()));
+        map.put("user_id_", ContextUtil.getCurrentUser().getUserId());
+        map.put("user_name_", ContextUtil.getCurrentUser().getFullname());
+        map.put("ip_", RequestUtil.getIpAddr(request));
+        map.put("uri_", request.getRequestURI());
+        map.put("type_", "报错日志");
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        throwable.printStackTrace(pw);
+        map.put("error_", sw.toString());
+        return map;
+    }
+
+}

+ 2 - 2
ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/klimsibps/mapping/UpdateDataTableMapper.xml

@@ -247,10 +247,10 @@
 
     <!--  添加操作日志   -->
     <insert  id="insertLog"  parameterType="java.util.Map">
-        INSERT INTO t_business_log (method_, params_, user_id_, user_name_, create_time_, time_, ip_, response_, uri_)
+        INSERT INTO t_business_log (method_, params_, user_id_, user_name_, create_time_, time_, ip_, response_, uri_ , type_ , error_)
          values
         (#{map.method_},#{map.params_},#{map.user_id_},#{map.user_name_},now(),
-         #{map.time_},#{map.ip_},#{map.response_},#{map.uri_})
+         #{map.time_},#{map.ip_},#{map.response_},#{map.uri_},#{map.type_},#{map.error_})
     </insert >
 
 </mapper>