fix log record,add sync model.

master
liuhulu 7 years ago committed by Limy
parent 12c38988fd
commit a0a8c73fb8

@ -2,6 +2,7 @@ package com.ruoyi.framework.aspectj;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Map; import java.util.Map;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature; import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterReturning;
@ -12,7 +13,10 @@ import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
@ -31,141 +35,129 @@ import com.ruoyi.project.system.user.domain.User;
@Aspect @Aspect
@Component @Component
public class LogAspect @EnableAsync
{ public class LogAspect {
private static final Logger log = LoggerFactory.getLogger(LogAspect.class); private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
@Autowired @Autowired
private IOperLogService operLogService; private IOperLogService operLogService;
// 配置织入点 // 配置织入点
@Pointcut("@annotation(com.ruoyi.framework.aspectj.lang.annotation.Log)") @Pointcut("@annotation(com.ruoyi.framework.aspectj.lang.annotation.Log)")
public void logPointCut() public void logPointCut() {
{ }
}
/**
/** *
* *
* * @param joinPoint
* @param joinPoint *
*/ */
@AfterReturning(pointcut = "logPointCut()") @AfterReturning(pointcut = "logPointCut()")
public void doBefore(JoinPoint joinPoint) public void doBefore(JoinPoint joinPoint) {
{ handleLog(joinPoint, null);
handleLog(joinPoint, null); }
}
/**
/** *
* *
* * @param joinPoint
* @param joinPoint * @param e
* @param e */
*/ @AfterThrowing(value = "logPointCut()", throwing = "e")
@AfterThrowing(value = "logPointCut()", throwing = "e") public void doAfter(JoinPoint joinPoint, Exception e) {
public void doAfter(JoinPoint joinPoint, Exception e) handleLog(joinPoint, e);
{ }
handleLog(joinPoint, e);
} @Async
private void handleLog(final JoinPoint joinPoint, final Exception e) {
private void handleLog(JoinPoint joinPoint, Exception e) try {
{ // 获得注解
try Log controllerLog = getAnnotationLog(joinPoint);
{ if (controllerLog == null) {
// 获得注解 return;
Log controllerLog = getAnnotationLog(joinPoint); }
if (controllerLog == null)
{ // 获取当前的用户
return; User currentUser = ShiroUtils.getUser();
}
// *========数据库日志=========*//
// 获取当前的用户 OperLog operLog = new OperLog();
User currentUser = ShiroUtils.getUser(); operLog.setStatus(UserConstants.NORMAL);
// 请求的地址
// *========数据库日志=========*// String ip = ShiroUtils.getIp();
OperLog operLog = new OperLog(); operLog.setOperIp(ip);
operLog.setStatus(UserConstants.NORMAL); operLog.setOperUrl(ServletUtils.getRequest().getRequestURI());
// 请求的地址 if (currentUser != null) {
String ip = ShiroUtils.getIp(); operLog.setLoginName(currentUser.getLoginName());
operLog.setOperIp(ip); operLog.setDeptName(currentUser.getDept().getDeptName());
operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); }
if (currentUser != null)
{ if (e != null) {
operLog.setLoginName(currentUser.getLoginName()); operLog.setStatus(UserConstants.EXCEPTION);
operLog.setDeptName(currentUser.getDept().getDeptName()); operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
} }
// 设置方法名称
if (e != null) String className = joinPoint.getTarget().getClass().getName();
{ String methodName = joinPoint.getSignature().getName();
operLog.setStatus(UserConstants.EXCEPTION); operLog.setMethod(className + "." + methodName + "()");
operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); // 处理设置注解上的参数
} getControllerMethodDescription(controllerLog, operLog);
// 设置方法名称 // 保存数据库
String className = joinPoint.getTarget().getClass().getName(); operLogService.insertOperlog(operLog);
String methodName = joinPoint.getSignature().getName(); } catch (Exception exp) {
operLog.setMethod(className + "." + methodName + "()"); // 记录本地异常日志
// 处理设置注解上的参数 log.error("==前置通知异常==");
getControllerMethodDescription(controllerLog, operLog); log.error("异常信息:{}", exp.getMessage());
// 保存数据库 exp.printStackTrace();
operLogService.insertOperlog(operLog); }
} }
catch (Exception exp)
{ /**
// 记录本地异常日志 * Controller
log.error("==前置通知异常=="); *
log.error("异常信息:{}", exp.getMessage()); * @param joinPoint
exp.printStackTrace(); *
} * @return
} * @throws Exception
*/
/** public void getControllerMethodDescription(Log log, OperLog operLog) throws Exception {
* Controller // 设置action动作
* operLog.setAction(log.action());
* @param joinPoint // 设置标题
* @return operLog.setTitle(log.title());
* @throws Exception // 设置channel
*/ operLog.setChannel(log.channel());
public static void getControllerMethodDescription(Log log, OperLog operLog) throws Exception // 是否需要保存request参数和值
{ if (log.isSaveRequestData()) {
// 设置action动作 // 获取参数的信息,传入到数据库中。
operLog.setAction(log.action()); setRequestValue(operLog);
// 设置标题 }
operLog.setTitle(log.title()); }
// 设置channel
operLog.setChannel(log.channel()); /**
// 是否需要保存request参数和值 * log
if (log.isSaveRequestData()) *
{ * @param operLog
// 获取参数的信息,传入到数据库中。 * @param request
setRequestValue(operLog); */
} private void setRequestValue(OperLog operLog) {
} Map<String, String[]> map = ServletUtils.getRequest().getParameterMap();
String params = JSONObject.toJSONString(map);
/** operLog.setOperParam(StringUtils.substring(params, 0, 255));
* log }
*
* @param operLog /**
* @param request *
*/ */
private static void setRequestValue(OperLog operLog) private Log getAnnotationLog(JoinPoint joinPoint) throws Exception {
{ Signature signature = joinPoint.getSignature();
Map<String, String[]> map = ServletUtils.getRequest().getParameterMap(); MethodSignature methodSignature = (MethodSignature) signature;
String params = JSONObject.toJSONString(map); Method method = methodSignature.getMethod();
operLog.setOperParam(StringUtils.substring(params, 0, 255));
} if (method != null) {
return method.getAnnotation(Log.class);
/** }
* return null;
*/ }
private static Log getAnnotationLog(JoinPoint joinPoint) throws Exception
{
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
if (method != null)
{
return method.getAnnotation(Log.class);
}
return null;
}
} }

Loading…
Cancel
Save