4

質問を編集したり、質問に関する詳細を尋ねたりすることを躊躇しないでください。

asを使用して以下の方法を実行できることlogはわかっていますが、ArithmeticExceptionaspectJ

public void afterThrowingAspect(){
    System.out.println("This is afterThrowingAspect() !");      
    int i=2/0;
    System.out.println("i value : "+i);
}

AspectJ クラスには、

@AfterThrowing(pointcut = "execution(* com.pointel.aop.test1.AopTest.afterThrowingAspect(..))",throwing= "error")
public void logAfterError(JoinPoint joinPoint,Throwable error) {
    System.out.println("Hi jacked Method name : " + joinPoint.getSignature().getName());
    log.info("Method name : " + joinPoint.getSignature().getName());
    log.info("Error report is : " + error);

}

TRY通常、 andCATCHブロックを使用して例外を処理logし、everyCATCHブロックのエラーを次のように処理できます。

public void someMehtod(){
    try{        
        int i=2/0;
        System.out.println("i value : "+i);
    }catch{ArithmeticException err){
        log.info("The exception you got is : " + err);
    }
}

しかし、私のプロジェクトのすべてのクラスで、すべてのブロックを個別に処理するのはlogging好きではありません。catchjava

log.info("The exception you got is : " + err); 

クラスを使用して、アプリケーションでlogging内部CATCHブロックを実行したいと思います。aspectJ

皆さんが私の質問を理解してくれることを願っています。ありがとう。

4

1 に答える 1

0

コードから try/catch を単純に削除し、アスペクトに例外を記録するだけで済みます。

public void someMehtod(){
        int i=2/0;
        System.out.println("i value : "+i);
}

アスペクトで例外を再スローしないため、バブルアップしません。これは可能ですが、ここで何をしようとしているのかをもっとよく考えることを強くお勧めします。例外がスローされたという事実をログに記録する必要があるのはなぜですか? 例外は必ずしもエラーだけではなく、通常のコード ジャーニーで発生する可能性があります。例外名だけをログに記録するだけでは、問題のデバッグに役立つ可能性はほとんどありません。したがって、catch ブロックごとに特注のログ メッセージが必要になる可能性があります。繰り返しが見つかった場合は、結果をログアウトするメソッドを作成できます。

お役に立てれば、

マーク

于 2013-10-14T20:44:32.483 に答える