1、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2、自定义注解
package com.example.demo.aspect;
import java.lang.annotation.*;
/**
* @Author: pandafox
* @Desctription: TODO
* @Date: Created in 2021/1/1 19:53
* @Version: 1.0
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
}
3、日志切面
package com.example.demo.aspect;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* @Author: pandafox
* @Desctription: TODO
* @Date: Created in 2021/1/1 19:56
* @Version: 1.0
*/
@Aspect
@Component
@Slf4j
public class SysLogAspect {
@Pointcut("@annotation(com.example.demo.aspect.SysLog)")
public void log() {
}
@Around(value = "log()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
//1.获取包名和类名
String className = joinPoint.getTarget().getClass().getName();
//2.获取方法名
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
//3.打印入参出参日志
Object[] args = joinPoint.getArgs();
Gson gson = new Gson();
log.info("{}.{}() 执行, Params ==> " + gson.toJson(args), className, method.getName());
Object proceed = joinPoint.proceed();
log.info("{}.{}() 执行, Returns ==> " + gson.toJson(proceed), className, method.getName());
return proceed;
}
}
4、使用方式
在对应方法上面加上@SysLog()
注解
@SysLog()
@PostMapping("/test")
@ResponseBody
public Map<String, Object> getMsg(String id, String name) {
Map<String, Object> map = new HashMap<>();
map.put("result", "response msg");
map.put("id", id);
map.put("name", name);
return map;
}
5、效果
2021-01-01 20:36:45.453 INFO 3956 --- [nio-8080-exec-7] com.example.demo.aspect.SysLogAspect : com.example.demo.controller.TestController.getMsg() 执行, Params ==> ["100","zhangsan"]
2021-01-01 20:36:45.466 INFO 3956 --- [nio-8080-exec-7] com.example.demo.aspect.SysLogAspect : com.example.demo.controller.TestController.getMsg() 执行, Returns ==> {
"result":"response msg","name":"zhangsan","id":"100"}