This commit is contained in:
77
2024-07-15 23:08:32 +08:00
parent 8a027e5c0d
commit d77b58defe

View File

@@ -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;
}
}