2

我需要捕獲log4net異常(它自己的異常,而不是由它記錄的應用程序異常)。我希望有做這種方式的一種方式:捕獲log4net異常

Try 
    _logger.Info(response) 
Catch ex As Exception 
    Excepciones.HandleException(ex, "PolicyCore") 
End Try 

我有這樣的代碼實現,並有在編譯沒有錯誤,但我強迫log4net的有一個錯誤(指向在配置文件中不存在的數據庫)和沒有什麼是扔。
我已經試過了聽衆的形式給出:

<appSettings> 
     <add key="log4net.Internal.Debug" value="true" /> 
    </appSettings> 
    <system.diagnostics> 
     <trace autoflush="true" indentsize="4" > 
     <listeners> 
      <add name="textWriterTraceListener" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="C:\\temp\\log4net.txt" /> 
      <remove name="Default" /> 
     </listeners> 
     </trace> 
    </system.diagnostics> 

,它的寫入錯誤log4net.txt,強制那些我的意思。

最後這個問題有兩個缺點:它不會將每個錯誤追加到文件中,如果錯誤是相同的,它不會寫入它,我無法讓偵聽器將每個錯誤寫入文件,只有一個(我不知道如何完全配置跟蹤監聽器,可能是這樣)。因此它不會將日期和時間附加到每一行,這對我來說是必要的。最後我不能給它結構(xml)。

即使聽衆工作我需要使用try/catch aproach,因爲我使用企業庫中的ExceptionHandling來記錄我的應用程序中的錯誤。

任何人遇到問題和/或有解決方案?

回答

2

Log4net被設計爲不會拋出任何異常。這似乎是一個好主意,因爲如果您的應用程序因爲無法登錄而失敗,那確實會非常糟糕。因此,如果您需要記錄某些消息,並且需要確保其正常工作,那麼您不應該使用日誌框架,而是將其作爲「業務邏輯」的一部分來實現。

您提到只記錄一次異常。我認爲這不是真的:Log4net通常會禁用不起作用的appender,因此只有一個例外。例如AdoNetAppender可以配置爲re-connect以防數據庫出現故障,在這種情況下,您將看到多次相同的異常。

+0

我不知道log4net禁用的appender不起作用。這就是爲什麼我看不到這個appender不止一個錯誤的原因。我正在嘗試這個問題,因爲我們正在實施的應用程序可能會作爲一個合法的關鍵,因此它將需要記錄一切,包括log4net錯誤,以防應用程序失敗。將跟蹤錯誤保存到企業庫異常處理似乎非常複雜。我將按照原樣使用它:日誌記錄框架。 BL會處理所有必要的邏輯。非常感謝你。 – euther

+3

@Stefan「Log4net被設計爲不拋出任何異常」,那麼如果日誌記錄失敗了,我們可以如何找到它失敗的原因? – VJAI

+0

您可以打開「內部調試」。你可以在log4net faq裏找到這方面的信息:http://logging.apache.org/log4net/release/faq.html –