From d77b58defe09e9d7ddad6ba1fdd55f6be10e8faf Mon Sep 17 00:00:00 2001 From: 77 <77@77.com> Date: Mon, 15 Jul 2024 23:08:32 +0800 Subject: [PATCH] 1231123 --- .../ruoyi/framework/aspectj/LogAspect.java | 67 +++++++++++++++---- 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index 300ef0bd..a2a9b30e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -16,16 +16,20 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.annotation.AfterReturning; -import org.aspectj.lang.annotation.AfterThrowing; -import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; +import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.springframework.validation.BindingResult; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Collection; +import java.util.Date; import java.util.Map; import java.util.StringJoiner; @@ -43,16 +47,36 @@ public class LogAspect { * 排除敏感属性字段 */ public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" }; + // 配置织入点 + @Pointcut("@annotation(com.ruoyi.common.annotation.Log)") + public void logPointCut() { + // do nothing + } + + @Around(value = "logPointCut()") + public Object around(ProceedingJoinPoint pjp) throws Throwable { + long startTime = System.currentTimeMillis(); + Log controllerLog = getAnnotationLog(pjp); + try { + Object result = pjp.proceed(); + this.handleLog(pjp,controllerLog,null,result,startTime); + return result; + } catch (Exception e){ + this.handleLog(pjp,controllerLog,e,null,startTime); + throw e; + } + } + /** * 处理完请求后执行 * * @param joinPoint 切点 */ - @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") - public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) { - handleLog(joinPoint, controllerLog, null, jsonResult); - } +// @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") +// public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) { +// handleLog(joinPoint, controllerLog, null, jsonResult); +// } /** * 拦截异常操作 @@ -60,13 +84,14 @@ public class LogAspect { * @param joinPoint 切点 * @param e 异常 */ - @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") - public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) { - handleLog(joinPoint, controllerLog, e, null); - } +// @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") +// public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) { +// handleLog(joinPoint, controllerLog, e, null); +// } - protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) { + protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult,long startTime) { try { + long endTime = System.currentTimeMillis(); // *========数据库日志=========*// OperLogEvent operLog = new OperLogEvent(); StringBuilder logString = new StringBuilder(); @@ -103,6 +128,10 @@ public class LogAspect { operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); logString.append(String.format("exception=%s;",e.getMessage())); } + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + logString.append(";StartTime:").append(dateFormat.format(new Date(startTime))); + logString.append(",EndTime:").append(dateFormat.format(new Date(endTime))); + logString.append(",CostTime:").append(endTime - startTime).append("ms"); log.info(logString.toString()); // 发布事件保存数据库 if(controllerLog.isSaveDb()){ @@ -215,4 +244,18 @@ public class LogAspect { return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse || o instanceof BindingResult; } + + /** + * 是否存在注解,如果存在就获取 + */ + private Log getAnnotationLog(JoinPoint joinPoint) { + // 获取方法上面的注解 + Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); + Log writeLogAnnotation = method.getAnnotation(Log.class); + if (writeLogAnnotation == null) { + // 获取类上的注解 + writeLogAnnotation = joinPoint.getTarget().getClass().getAnnotation(Log.class); + } + return writeLogAnnotation; + } }