spring 日志切面 aspect 创建

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

  }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容