您尚未登录。

楼主 #1 2020-08-10 11:21:05

kk
会员
注册时间: 2020-07-20
已发帖子: 10
积分: 10

Spring AOP 实现打印日志记录-请求参数和结果

写在前面

新人报道吖~~,第一次在这里分享,希望对大家有帮助,一直成长!
今日分享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;
    }
}

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn