Spring给我们的提供了强大的AOP功能;什么是AOP?AOP为Aspect Oriented Programming的缩写,意为:面向切面编程;我们可以使用它来做一些统一动作,这里我将使用它来记录我们的Controller层接口的请求日志和返回数据。
代码清单:
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
记录日志核心代码:LogAspectj.java
@Slf4j
@Aspect
@Component
public class LogAspectj {
/**
* 切入点
*/
@Pointcut("execution(public * cn.tugos.logaop.demo.controller.*Controller.*(..))")
public void logAspect() {
}
/**
* 环绕操作
* 记录请求日志
*/
@Around("logAspect()")
public Object aroundLog(ProceedingJoinPoint joinPoint) throws Throwable {
// 获取请求参数
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
// 记录执行时间
long startTime = System.currentTimeMillis();
//处理请求
Object result = joinPoint.proceed();
//记录日志
try {
LogVO logVo = LogVO.builder()
//请求ip
.ip(HttpUtils.getIpAddress(request))
//请求路径
.url(request.getRequestURL().toString())
//处理的类
.