Spring Aspect 记录异常

时间:2021-05-24 20:02:03

标签: spring spring-boot aop

我在 spring-boot REST API 中添加了如下方面的方面来记录对包“com.leanring.sprint”中所有方法的调用,如下所示:

@Aspect
@Component
public class LogAdvice {
    
    Logger logger = LoggerFactory.getLogger(LogAdvice.class);
    
    @Pointcut(value = "execution(* com.learning.spring.*.*.*(..))")
    public void pointCut() {
        
    }

    @Around("pointCut()")
    public Object appLogger(ProceedingJoinPoint jp) throws Throwable {
        
        ObjectMapper mapper = new ObjectMapper();
        
        String methodName = jp.getSignature().getName();
        String className = jp.getTarget().getClass().toString();
        Object[] args = jp.getArgs();  
    
        logger.info("Start call: " + className + ":" + methodName + "()" + " with arguments: " + mapper.writeValueAsString(args));
        
        Object object = jp.proceed();
        
        logger.info("End call: " + className + ":" + methodName + "()" + " returned: " + mapper.writeValueAsString(object));
                
        return object;
    }
}

这工作正常,但我也希望它能够记录调用方法时可能发生的任何异常。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我想您可以使用相同的切入点添加另一个 @AfterThrowing 建议或将 jp.proceed(); 包装在 try-catch 块中。