1. 程式人生 > 其它 >SpringBoot專案中使用Aspect實現日誌切面

SpringBoot專案中使用Aspect實現日誌切面

前言

仔程式碼檢視時,討論到在controller層手動新增日誌太麻煩,於是想要註解和切面實現日誌的自動輸出,簡化程式碼、簡練程式

利用Aspect實現日誌切面

1、新增aop依賴

<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、定義註解作為切點

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface log { String value() default ""; }

3、宣告切面,完成日誌記錄

@Aspect  // 使用@Aspect註解宣告一個切面
@Component
@Slf4j
public class LogAspect {

    private static final String START = "start";
    private static final String END = "end";

    @Pointcut("@annotation(com.zh.live.aspect.log)")
    public
void logPointCut() {} @Before("logPointCut()") //前置通知 public void before(JoinPoint point) throws Throwable { try { printLog(point,START); } catch (Exception e) { } } @After("logPointCut()") //後置通知 public void after(JoinPoint point) throws Throwable {
try { printLog(point,END); } catch (Exception e) { } } private void printLog(JoinPoint joinPoint, String type) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String beginTime = dateFormat.format(new Date()); //請求的 類名、方法名 String className = joinPoint.getTarget().getClass().getName(); String methodName = signature.getName(); //請求的引數 Object[] args = joinPoint.getArgs(); //列印日誌 log.info("{} {} {} | time: {} param: {} " , className,methodName,type,beginTime,args); } }

4、在controller中需要新增日誌的方法上新增@log註解

@log
    @PostMapping("/registerUser")
    public R registerUser(@RequestBody UserTo user) 

5、postman傳送請求進行測試

至此,日誌切面就完全結束了,我這裡寫的比較簡單,大家也可以任意擴充套件