【问题标题】:Spring Aspect to log exceptions [duplicate]Spring Aspect记录异常[重复]
【发布时间】:2021-05-25 10:34:37
【问题描述】:

我在我的 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;
    }
}

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

我该怎么做?

【问题讨论】:

  • 为什么不使用@AfterThrowing 建议?

标签: spring spring-boot aop


【解决方案1】:

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

【讨论】:

  • 没错。如果您不需要处理异常,则使用@AfterThrowing,只需记录它们。如果你想处理(一部分)异常,你需要使用@Around
猜你喜欢
  • 1970-01-01
  • 2016-07-04
  • 2014-02-10
  • 2014-08-20
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2013-08-31
相关资源
最近更新 更多