/** * @program: crisps-hr * @Description: 全局日志记录切面,只记录增删改 * @Author: zwx * @Date: 2021/4/28 14:52 */ @Aspect @Component public class GlobalLogAspect { /** * 自定义一种IO密集型任务的线程池 */ private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor( 30, 100, 120L, //允许线程空闲时间和单位,超过了核心线程出之外的线程在空闲时间到达之后会被销毁 TimeUnit.SECONDS, //指定一种队列 (有界队列 先进先出) new ArrayBlockingQueue<>(100), //默认线程工厂 Executors.defaultThreadFactory(), //自定义拒绝策略 new ThreadPoolExecutor.CallerRunsPolicy() ); @Resource private DggMongoUtils dggMongoUtils; @Pointcut("@annotation(net.crisps.hr.middle.common.aop.Log)") public void controllerPoint(){ } @Around("controllerPoint()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { Signature signature = pjp.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Object[] arguments = pjp.getArgs(); Method method = methodSignature.getMethod(); HrLog hrLog = new HrLog(); if (method.isAnnotationPresent(Log.class)) { // 获取request RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes; HttpServletRequest request = servletRequestAttributes.getRequest(); StringBuilder sb = new StringBuilder(); sb.append(request.getRequestURI()); sb.append(JSON.toJSONString(request.getParameterMap())); // 最佳请求参数 hrLog.setParams(sb.toString()); // 追加操作用户Ip LoginUser loginUser = LoginUtils.getLoginUser(); hrLog.setUserId(loginUser.getId()); hrLog.setUserName(loginUser.getName()); hrLog.setMchDetailId(loginUser.getMchDetailId()); // 操作时间 hrLog.setOperationTime(DggDateUtil.getCurrentDateTime()); // pjp执行 try { Object result = pjp.proceed(); if (result instanceof CrispsResponse) { // 返回对象 CrispsResponse mvResult = (CrispsResponse) result; // 追加 返回对象 hrLog.setResult(JSON.toJSONString(mvResult)); hrLog.setHasException(0); } return result; } catch (Exception e) { hrLog.setHasException(1); hrLog.setResult(e.getMessage()); // 打印错误日志 DggLogUtil.error(e, request.getRequestURI(), JSON.toJSONString(request.getParameterMap())); } finally { Class[] clazzs = method.getParameterTypes(); if (clazzs.length == arguments.length) { // 获取注解信息 String operationType = method.getAnnotation(Log.class).operationType(); String operationName = method.getAnnotation(Log.class).operationName(); hrLog.setOperationType(operationType); hrLog.setOperationName(operationName); hrLog.setIp(ContextHolderUtils.getIp()); hrLog.setId(DggKeyWorker.nextId()); } //使用多线程处理存储日志业务逻辑 EXECUTOR.execute(()->{ dggMongoUtils.save(ConstantInfo.USER_OPERATE_LOG_COLLECTION,hrLog); }); } } return pjp.proceed(); } }
/** * @program: crisps-hr * @Description: 日志 * @Author: zwx * @Date: 2021/4/28 14:58 */ @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Log { /** 要执行的操作类型比如:操作 **/ public String operationType() default ""; /** 要执行的具体操作比如:添加用户 **/ public String operationName() default ""; }
最后在controller上加上
@Log(operationName = "查询手机号码", operationType = "select")注解即可