1、pom.xml文件中添加依赖
<!--aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2、创建LoggerAspect.java文件
@Aspect
@Component
public class LoggerAspect {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Pointcut("execution(* com.example.test_example.controller.*.*(..))")
public void log() {}
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attr.getRequest();
String url = request.getRequestURL().toString();
String ip = request.getRemoteAddr();
String classMethod = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
ReturnLogger returnLogger = new ReturnLogger(url, ip, classMethod, args);
logger.info("Request = {}", returnLogger);
}
@After("log()")
public void doAfter() {
//可自行设定
logger.info("**************** doAfter ****************");
}
@AfterReturning(returning = "result", pointcut = "log()")
public void resultData(Object result) {
//返回请求访问方法的返回值
logger.info("Result: {}", result);
}
/**
* @Description 将访问者的信息写入日志的载体类
*/
private class ReturnLogger {
private String url;
private String ip;
private String classMethod;
private Object[] args;
public ReturnLogger(String url, String ip, String classMethod, Object[] args) {
this.url = url;
this.ip = ip;
this.classMethod = classMethod;
this.args = args;
}
@Override
public String toString() {
return "ReturnLogger{" +
"url='" + url + '\'' +
", ip='" + ip + '\'' +
", classMethod='" + classMethod + '\'' +
", args=" + Arrays.toString(args) +
'}';
}
}
}
(1)@Aspect 是标识一个类以供切面容器读取。
(2)@Pointcut(“execution(* com.example.test_example.controller..(…))”) 表示com.example.test_example.controller路径下的任何类任何方法被访问都将触发被@Pointcut 标示的方法相关的一系列事件,但是被标示的方法本身不会被执行,它仅仅是被声明的一个入口。
(3)@Before(“log()”) 表示在log()方法执行之前先执行被其标示的方法。
(4)@After(“log()”) 表示在log()方法执行结束后再执行被其标示的方法。
(5)@AfterReturning(returning = “result”, pointcut = “log()”) 表示被请求访问的方法访问结束后再执行被其标示的方法。
3、在浏览器中输入访问地址,日志显示结果如下: