谈谈我是如何使用AOP和自定义注解的方式来做日志处理的?

笔者的日志想带上执行的方法的中文名(自定义),于是决定使用AOP的方式来对自己的日志进行特殊的处理。

1.首先先附上自定义的注解:

import java.lang.annotation.*;

/**
 * 自定义方法名注解
 * 便于日志处理的时候获取方法名
 *
 * @author Cocowwy
 * @create 2021-05-05-11:29
 */
@Target(ElementType.METHOD)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodName {
    String value() default "";
}

注意作用目标是在方法上。

2.接下来给自己controller层上的方法加上自定义的注解。

    /**
     *  用户成功支付订单
     *
     * @param request
     * @return
     */
    @MethodName("用户付款订单成功")
    @PostMapping("/push/paidOrder")
    public void paidOrder(PaidOrderRequest request) {
        meiTuanPushService.paidOrder(request);
    }

我们这里的MethodName注解写上我们的中文名即可。

3.开始写我们的切面(敏感代码做模糊化处理)

/**
 * 请求记录日志记录,便于排查问题
 *
 * @author Cocowwy
 * @create 2021-05-05-11:15
 *
 */
@Aspect
@Component
@Slf4j
public class RequestLogAspect {

    /**
     * 切入点  排除自配送接口
     */
    @Pointcut("execution(public * com.xxxx.xxxxx.service.controller..*.*(..))" +
            "&&!execution(public * com.xxxx.takeout.xxxxx.controller.xxxxxxController.xxxxxxxxx(..))")
            //第二行execution  指定不进行AOP的方法
    private void pointCut() {
    }

    /**
     * 配置环绕切面
     * 
     * @param joinPoint
     * @return
     */
    @Around("pointCut()")
    public Object aroundMethod(ProceedingJoinPoint joinPoint) {
        String order_id = null;
        String methodName = null;
        Object[] objects = null;
        try {
            objects = joinPoint.getArgs();
            // 获取订单id  获取MethodName注解的值
            order_id = String.valueOf(JSONUtil.parse(objects[0]).getByPath("order_id"));
            methodName=((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(MethodName.class).value();
            log.info("订单id:【{}】,执行【{}】,请求参数为:{}", order_id, methodName, objects);
            joinPoint.proceed();
            log.info("订单id:【{}】,执行【{}】 成功!", order_id, methodName);
        } catch (Throwable e) {
            log.error("订单id:【{}】执行方法【{}】失败,接口入参如下:{},异常日志如下:", order_id, methodName, objects, e);
            return Result.ERROR;
        }
        return Result.OK;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值