2013-04-15 49 views
1

雖然毫無疑問,記錄器不應該導致應用程序崩潰,但是當我修復我的公司記錄器時,我不確定如何正確吞下日誌框架本身拋出的異常。在元代碼:日誌框架是否真的會吞噬日誌失敗?

public void write(TMessage message) 
{ 
    try 
    { 
     writeUnsafely(message); 
    } 
    catch(Exception loggingException) 
    { 
     // what should I do here? 
    } 
} 

我應該忽略loggingException(如log4net的那樣),或者我應該讓客戶端代碼選擇如何處理它(也許有可配置的處理程序)?

回答

1

NLOG具有允許記錄到被配置成拋出異常(或不)配置選項:

https://github.com/nlog/nlog/wiki/Configuration-file

(參見疑難解答日誌記錄部分)。

看來給客戶端代碼一個機會來處理它是一個合理的選擇。關於客戶程序如何處理異常的建議可能很好地包含在您的文檔中(如果您選擇實施此類功能)。一個例子可能類似於「你可以在應用程序的未處理的異常處理程序中捕獲LoggingException」。

+0

謝謝,你的鏈接真的確信讓內部異常處理程序可由客戶。看來log4net也有類似的東西:http://haacked.com/archive/2006/09/27/Log4Net_Troubleshooting.aspx – Notoriousxl

2

這完全取決於你,但無論你決定,記錄它。除了增加代碼和用戶的複雜性之外,我認爲使其不可配置。

你可以改爲編寫完美的代碼,它沒有錯誤,也不會拋出任何異常。 ;-)

+0

如果它是可選的,增加的複雜度是最小的;)我希望它永遠不會被需要......這是「以防萬一」:D – Notoriousxl