AOP 实现请求参数和结果记录

写在前面

AOP应用-请求日志记录
我们在写 web 项目时,请求内容日志记录对我们来说很重要,特别是出问题的要排查时,传的什么参数,返回内容都是我们排查的依据,那我们不可能每个controller上的每一个方法都打印log,对原有业务代码有侵入性,代码也冗余和繁琐。此时AOP就起到了重要作用。可以对业务无任何侵入。而本文实现用的@Around,如单词意思是围绕,就是包围着业务代码。那我们就可以在业务执行前获取请求参数打印,执行完成着结果打印,就实现我们的功能了。

代码

建一个LogTraceHandlerAop文件,随便找个地方放下就可以。把
@Around 改成你的目标目录即可
LogTraceHandlerAop.java

@Slf4j
@Aspect
public class LogTraceHandlerAop {
	// controller 下的所有方法
    @Around("execution(* com.example.demo.controller..*.*(..))") 
    public Object doAround(ProceedingJoinPoint call) throws Throwable {
        MethodSignature signature = (MethodSignature) call.getSignature();
        Object[] args = call.getArgs();
        if (args.length <= 0) {
            return call.proceed();
        }
        Method method = signature.getMethod();
        String methodName = method.getName();
        String[] classNameArray = method.getDeclaringClass().getName().split("\\.");
        String className = classNameArray[classNameArray.length - 1];
        StringBuilder buffer = new StringBuilder();
        for (Object arg : args) {
            buffer.append(" ");
            buffer.append(arg);
        }
        log.info("请求方法:{},请求参数:{}", className + "." + methodName, buffer.toString());
        // 主要业务
        Object result = call.proceed();
        // 返回结果
        String resJson = JSON.toJSONString(result);
        log.info("请求返回结果{}", resJson);
        return result;
    }
}

小小的鼓励

ps: 对初学者说下,其实会写的都可以写出来,不懂AOP的小伙伴也不要畏惧,学会一个都是照葫芦画瓢的事。不懂查一下就有了,资源辣么多。如果你需要可以私信我,在我能力范围内会尽力协助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值