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的小伙伴也不要畏惧,学会一个都是照葫芦画瓢的事。不懂查一下就有了,资源辣么多。如果你需要可以私信我,在我能力范围内会尽力协助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章