定义一个切面日志

spring 文章 2024-03-25 10:11 173 0 全屏看文

AI助手支持GPT4.0

我们可以通过aspect进行无侵入式的日志记录,

具体代码如下:

定义一个注解

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

我们定义一个切面处理类。

并定义切面,然后,通过@Around("logPointCut()")注解,你定义了一个环绕通知(Around Advice),它将围绕着上述切点定义的方法执行。这意味着,每当有方法被@LogOperation注解标记,并被调用时,around方法就会被触发。在这个方法内部,你可以在目标方法执行前后添加自定义逻辑,比如记录日志、计算执行时间等。

/**
* 系统⽇志,切⾯处理类
*/
@Aspect
@Component
public class LogOperationAspect {
    @Autowired
    private SysLogOperationService sysLogOperationService;
    
    @Pointcut("@annotation(cn.sanshu.common.annotation.LogOperation)")
    public void logPointCut() {
        
   }
    
    @Around("logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        long beginTime = System.currentTimeMillis();
        try {
            //执⾏⽅法
            Object result = point.proceed();
            
            //执⾏时⻓(毫秒)
            long time = System.currentTimeMillis() - beginTime;
            //保存⽇志
            saveLog(point, time, OperationStatusEnum.SUCCESS.value());
            
            return result;
       }catch(Exception e) {
            //执⾏时⻓(毫秒)
            long time = System.currentTimeMillis() - beginTime;
            //保存⽇志
            saveLog(point, time, OperationStatusEnum.FAIL.value());
            
            throw e;
       }
   }
    
    private void saveLog(ProceedingJoinPoint joinPoint, long time,
Integer status) {
        //逻辑对象处理
        
        //保存到DB
        sysLogOperationService.save(log);
   }
}


使用:

image.png

-EOF-

AI助手支持GPT4.0