4

出于日志记录的目的,我们正在尝试通过 Spring 自己的 AOP 捕获各种 Spring 的运行时异常,我必须说我没有成功,所以我会很感激任何关于如何解决这个问题的想法。

我试过这样的事情:

@Aspect
@Component
public class SomeAspect {

@AfterThrowing(pointcut = "execution(* org.springframwork.oxm..*(..))", throwing = "exception")
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void adviseSpringErrorEvents(JoinPoint joinPoint, final UnmarshallingFailureException exception) throws Throwable {

         LOG.debug(this.getClass().getSimpleName() + " - Error message advice fired on method: " + joinPoint.getSignature().getName());
     }
}

该类是自动代理的,并且方面类中的其余建议正确触发,因此 AspectJ 表达式肯定存在问题。

更新:方法中的代码没有运行,我无意在建议中捕获异常。

有任何想法吗?提前谢谢。

PS Spring框架版本是3.0.6。

4

1 回答 1

2

以下是一些对我来说很突出的事情:

  1. 你的切入点是你试图捕捉它的异常所在的弹簧包,它应该是你试图加入的地方execution(* com.mypackage..*(..))
  2. 您正在投掷可投掷的东西,但您不需要声明任何被投掷的东西。被告知的异常不会通过此代码传播。

要尝试的事情:

  1. 将您的异常参数扩展为Exception. 也许您正在寻找的例外是在不同的层次结构中。
  2. 将切入点扩大到 * 包级别 - 但最好不要同时执行 1 和 2。
  3. 将日志记录提高到更严格的级别,以确保它不会被您的日志记录框架吞噬。
于 2012-04-10T13:04:57.280 回答