AOP自定义切面日志

话不多说,直接上代码:

/**
 * 自定义日志记录
 */
@Documented
@Target({ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface OptionalLog {

    /**
     * 日志模块
     *
     * @return
     */
    String module() default "";

    /**
     * 记录日志的操作类型,日志说明
     */
    String operateType() default "";

}

定义切面:

/**
 * 切面日志
 *
 * @author lpz
 */
@Slf4j
@Aspect
@Component
public class OptionalLogAop {

    // 配置接入点,即为所要记录的action操作目录
    @Pointcut("execution(* com.cmcc.hy.portray.api.controller..*.*(..))")
    private void controllerAspect() {
    }

    @Around("controllerAspect()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {

        // 拦截的放参数类型
        Signature sign = joinPoint.getSignature();
        if (!(sign instanceof MethodSignature)) {
            log.error("该注解只能用于方法, OptionalLog only use for method... {}", sign);
//            throw new IllegalArgumentException("该注解只能用于方法");
        }
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method currentMethod = methodSignature.getMethod();
        // 获取方法(此为自定义注解)
        OptionalLog annot = currentMethod.getAnnotation(OptionalLog.class);
        if (Objects.isNull(annot)) {
            return joinPoint.proceed();
        }

        // 拦截的方法名称。当前正在执行的方法
        String methodName = methodSignature.getName();
        //
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();
        // 从session获取用户名
        String userName = (String) request.getSession().getAttribute(SessionConstants.SESSION_KEY_USERNAME);
        // 获取系统当前时间
        String recordTime = DateUtil.formatDateToStr(new Date(), DateUtil.FORMATSTR_YYYY_MM_DD_HHMMSS);
        // 获取访问真实IP
        String ipAddress = IpUtil.getRequestIp();
        //获取请求路径
        String requestURI = request.getRequestURI();
        // 获取注解的modules 设为操作模块, 设为执行方法
        String module = annot.module();
        String operateType = annot.operateType();

        //接受客户端的数据
        StringBuilder paramsBuild = new StringBuilder();
        Map<String, String[]> maps = request.getParameterMap();
        maps.forEach((s, strings) -> {
            for (String string : strings) {
                paramsBuild.append(s).append("-").append(string).append(",");
            }
        });
        String params = paramsBuild.toString();
        params = StringUtil.isBlank(params) ? params : params.substring(0, params.length() - 1);
        Object[] arguments = joinPoint.getArgs();
        for (Object argument : arguments) {
            System.out.println(argument);
        }

        // 执行目标方法,获得返回值。response
        Object result = null;
        try {
            result = joinPoint.proceed();
        } catch (Exception e) {
            log.error("处理响应结果异常response exception, {}", e.getMessage(), e);
        } finally {
            log.info("OptionalLog record... userName:{}, requestURI:{}, params:{}, module:{}, operateType:{}, ip:{}, result:{}, recordTime:{}",
                    userName, requestURI, params, module, operateType, ipAddress, result, recordTime);
        }

        return result;
    }

}

 

 

添加注解:

  /**
     * 导出模型分析结果excel
     */
    @OptionalLog(module = "操作日志", operateType = "导出模型分析结果")
    @RequestMapping(value = "/exportModel", method = RequestMethod.GET)
    @ApiOperation(value = "导出模型分析结果", notes = "导出模型分析结果")
    public String exportModel(Long id, HttpServletResponse response) {

        return modelResultInfoService.exportModel(id, response);
    }

 

打印形式:

2019-12-05 10:45:56.334  INFO 64116 [io-8800-exec-28] hy.portray.api.common.aop.OptionalLogAop 95 : OptionalLog record... userName:tscmail, requestURI:/customgroup/query/export, params:id-79, module:操作日志, operateType:导出客群数据, ip:172.18.34.133, result:嘿嘿嘿.xls, recordTime:2019-12-05 10:45:54

2019-12-05 10:45:56.334  INFO 64116 [io-8800-exec-28] hy.portray.api.common.aop.OptionalLogAop 95 : OptionalLog record... userName:tscmail, requestURI:/customgroup/query/export, params:id-79, module:操作日志, operateType:导出客群数据, ip:172.18.34.133, result:嘿嘿嘿.xls, recordTime:2019-12-05 10:45:54

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值