2013-08-28 68 views
4

請不要猶豫編輯問題或詢問有關questin的更多細節。在spring中使用aspectJ記錄異常?

我知道可以log使用aspectJ作爲以下方法的ArithmeticException

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

中aspect類有,

@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像每一個catch塊單獨在所有java類我的項目一樣的,

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

我願做loggingCATCH塊我的應用程序使用aspectJ類。

希望你們都明白我的問題。謝謝。

+0

如果定義了@AfterThrowing切入點爲'切入點= 「執行(* com.pointel。*(..))」'你會觸發@AfterThrowing方面每次在com.pointel的包和子包中引發異常。那是你想要的嗎? – Julien

+0

請參閱我編輯的問題。 –

+0

@Julien我不需要記錄'@ AfterThrowing'方法。我需要使用'aspectJ'在catch塊中記錄'exception'。我可能嗎? –

回答

0

它可能只需從您的代碼中刪除try/catch並簡單地在您的方面記錄異常。

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

因爲你不重新扔在一個方面的異常那麼就不會泡沫了。儘管這是可能的,但我強烈建議你更多地考慮你在這裏做什麼。爲什麼你需要記錄拋出異常的事實?例外不一定只用於錯誤,但可以在正常的代碼旅程中發生。只記錄異常名稱不太可能幫助您調試問題。因此,您可能需要爲每個catch塊定製一條日誌消息。如果你確實發現重複,你可以創建一個方法來註銷結果。

希望這有助於

馬克