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 式に問題があるはずです。

更新: メソッド内のコードは実行されず、アドバイスで例外をキャッチするつもりはありません。

何か案は?事前にt​​hx。

PS Spring フレームワークのバージョンは 3.0.6 です。

4

1 に答える 1

2

ここに私にとって際立っていることがいくつかあります:

  1. ポイントカットは、キャッチしようとしている例外が含まれている春のパッケージ用です。参加しようとしている場所である必要がありますexecution(* com.mypackage..*(..))
  2. throwable をスローしていますが、スローされるものを宣言する必要はありません。通知されている例外は、このコードを通じて伝播されません。

試すこと:

  1. 例外パラメーターを に展開しExceptionます。探している例外が別の階層にある可能性があります。
  2. ポイントカットを * パッケージ レベルまで広げます。ただし、1 と 2 の両方を同時に実行しないことをお勧めします。
  3. ログ記録をより深刻なレベルに上げて、ログ記録フレームワークによって飲み込まれないようにします。
于 2012-04-10T13:04:57.280 に答える