2012-12-17 161 views
1

我有一個關於如何設計錯誤處理的通用問題。我想在我的代碼中使用一些第三方服務。通常我將服務包裝在客戶端類中。然後,我的其他代碼只處理我的客戶端類,並且對真正的服務視而不見。我的客戶端類有一些記錄錯誤的機制。但它不想捕捉和處理來自服務的任何異常。理想情況下,它應該忽略異常處理並讓異常傳播到外部。但是,如果我想記錄異常,我必須這樣做:發生異常時記錄日誌嗎?

try{ 
    .... // call 3rd party service; 
}catch(Exception e){ // e is triggered from the service; 
    Log.error("Oops, an error: " + e); // shall I log the exception?? 
    throw e; // don't swallow the exception; 
} 

一方面,我不想這樣做。我可以忽略異常的處理和記錄。讓我的客戶端類的調用者處理異常或記錄錯誤。問題是,我應該在什麼時候記錄異常,什麼時候不應該?我想聽聽一些常見的做法和原則。謝謝。

+0

這是哪一種語言? –

+0

Java是語言, – Steve

回答

1

不要在每個級別都記錄異常。只記錄在「最高」級別。將其記錄在不記錄日誌的地方會導致異常被錯過。

+0

簡單指南。可能不適用於任何地方,但這是我正在尋找的東西。 – Steve

0

這取決於你。我的建議是在它們指出真正意想不到的情況時記錄異常。當然,名稱「例外」似乎表明,情況總是如此,但不一定。

有時,代碼會針對未曾想到的情景返回異常。

有時候,代碼調用其他代碼,知道它會在某些情況下調用異常,但是這組異常是「OK」。

有時候,一個異常表明真的發生了一些意想不到的事情,而這通常是一件壞事。那時你應該記錄它,或者更好,確保你的代碼大聲抱怨。

0

如果觸發異常的機率相當低,我看不到而不是來記錄它。不記錄異常來幫助調試的唯一原因是它是否持續觸發。如果你有一個有這個特性的異常,那麼我建議你編寫你的代碼,這樣你就不會有異常不斷被觸發。

tl; dr:異常(希望)是罕見的,所以記錄它們。

+0

但記錄他們_where_?在每一種方法?我知道Java使用檢查的異常,所以在Java中也許是有意義的,但在C#等語言中這是一個可怕的想法。 –

+0

我承認你的觀點。 – AVP