使用aspectJ在spring中记录异常?

时间:2013-08-28 07:39:56

标签: java spring logging exception-handling aspectj

请不要犹豫,编辑问题或询问有关任务的详细信息。

我知道我可以log使用ArithmeticException作为aspectJ的{​​{1}},

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);

}

通常我可以使用TRYCATCH块以及log每个CATCH块中的错误处理异常,

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类在我的应用程序中执行CATCHaspectJ块。

希望你们都明白我的问题。谢谢。

1 个答案:

答案 0 :(得分:0)

可以简单地从代码中删除try / catch,只需在您的方面记录异常。

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

因为你没有在方面重新抛出异常,所以它不会冒泡。虽然这是可能的,但我强烈建议您多考虑一下这里要做的事情。为什么需要记录抛出异常的事实?例外不仅仅是错误,而是可以在正常的代码旅程中发生。只记录异常名称不太可能帮助您调试问题。因此,您可能需要为每个catch块定制一条日志消息。如果你确实发现重复,你可以创建一个方法来注销结果。

希望这有帮助,

标记