美文网首页
spring 日志切面 aspect 创建

spring 日志切面 aspect 创建

作者: 会弹琴的程序猿 | 来源:发表于2019-02-22 10:06 被阅读0次

@Aspect

@Component

public class SysLogAspect {

@Autowired

  private SysLogServicesysLogService;

  @Pointcut("@annotation(cn.makeid.common.annotation.SysLog)")

public void logPointCut() {

}

@Around("logPointCut()")

public Objectaround(ProceedingJoinPoint point)throws Throwable {

long beginTime = System.currentTimeMillis();

      //执行方法

      Object result = point.proceed();

      //执行时长(毫秒)

      long time = System.currentTimeMillis() - beginTime;

      //保存日志

      saveSysLog(point, time);

      return result;

  }

private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {

MethodSignature signature = (MethodSignature) joinPoint.getSignature();

      Method method = signature.getMethod();

      SysLogEntity sysLog =new SysLogEntity();

      SysLog syslog = method.getAnnotation(SysLog.class);

      if(syslog !=null){

//注解上的描述

        sysLog.setOperation(syslog.value());

      }

//请求的方法名

      String className = joinPoint.getTarget().getClass().getName();

      String methodName = signature.getName();

      sysLog.setMethod(className +"." + methodName +"()");

      //请求的参数

      Object[] args = joinPoint.getArgs();

      try{

String params =new Gson().toJson(args[0]);

        sysLog.setParams(params);

      }catch (Exception e){

}

//获取request

      HttpServletRequest request = HttpContextUtils.getHttpServletRequest();

      //设置IP地址

      sysLog.setIp(IPUtils.getIpAddr(request));

      //用户名

      String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername();

      sysLog.setUsername(username);

      sysLog.setTime(time);

      sysLog.setCreateDate(new Date());

      //保存系统日志

      sysLogService.insert(sysLog);

  }

}

相关文章

网友评论

      本文标题:spring 日志切面 aspect 创建

      本文链接:https://www.haomeiwen.com/subject/ikjdyqtx.html