本节中,您将学习如何在 Spring Boot 中使用 AOP 切面统一处理请求日志,打印进出参相关参数。
注意:本节中 AOP 切面统一处理请求日志已被博主用于生产环境中,所以您在生产环境中添加它时,仅需对出入参稍加调整即可。
一、先看看日志输出效果
Spring Boot AOP 打印日志
可以看到,每个对于每个请求,开始与结束一目了然,并且打印了以下参数:
URL : 请求接口地址;
HTTP Method : 请求的方法,是 POST , GET , 还是 DELETE 等;
Class Method : 对应 Controller 的全路径以及调用的哪个方法;
IP : 请求 IP 地址;
Request Args : 请求入参,以 JSON 格式输出;
Response Args : 响应出参,以 JSON 格式输出;
Time-Consuming : 请求耗时;
效果应该还不错吧!接下来就让我们一步一步去实现该功能, 首先, 新建一个 Spring Boot Web 项目 。
二、添加 Maven 依赖
在项目 pom.xml 文件中添加依赖:
org.springframework.boot
spring-boot-starter-aop
com.alibaba
fastjson
1.2.55
复制代码
三、配置 AOP 切面
在配置 AOP 切面之前,我们需要了解下 aspectj 相关注解的作用:
@Aspect :声明该类为一个注解类;
@Pointcut :定义一个切点,后面跟随一个表达式,表达式可以定义为某个 package 下的方法,也可以是自定义注解等;
切点定义好后,就是围绕这个切点做文章了:
@Before : 在切点之前,织入相关代码;
@After : 在切点之后,织入相关代码;
@AfterReturning : 在切点返回内容后,织入相关代码,一般用于对返回值做加的场景;
@AfterThrowing : 用来处理当织入的代码抛出异常后的逻辑处理;
@Around : 在切入点前后织入代码,并且可以自由的控制何时执行切点;
接下来,定义一个 WebLogAspect.java 切面类,代码如下:
package site.exception.springbootaopwebrequest.aspect;
import com.alibaba.fastjson.JSONObject;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;