首先在pom文件中加入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
然后写个注解类
//注解类
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotation {
String value() default "";
}
再写切面类
//切面类
@Aspect
@Component
@Slf4j
public class LogAspect {
@Pointcut(value = "@annotation(com.example.demo.annotation.LogAnnotation)")
public void webLog(){}
@Before(value = "webLog()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//请求的url
log.info("URL:" + request.getRequestURL().toString());
//请求的方法 get/post/put/delete
log.info("HTTP_METHOD:" + request.getMethod());
//请求方的ip地址
log.info("IP:" + request.getRemoteAddr());
//请求访问的类名
log.info("CLASS_METHOD:" + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
//请求访问的方法的参数
log.info("ARGS:" + Arrays.toString(joinPoint.getArgs()));
request.getRequestURL();
}
@AfterReturning(pointcut = "webLog()", returning = "ret")
public void doAfterReturning(Object ret){
//方法的返回值
log.info("RESPONSE:" + ret);
}
}
目标类
@RestController
public class LoginController {
@GetMapping("/hello")
@LogAnnotation
public String auth() {
System.out.println("========登录");
return "hello";
}
}
运行结果:
简单粗暴的就完成了!