我有一個運行整天數據轉換和同步的工具。Log4Net停止記錄
如果應用程序暫時停止運行,這不是什麼大事,但它必須記錄它的操作。我寧願應用程序失敗,也不願意登錄。我遇到了幾個涉及這個主題的帖子,但我無法獲得任何解決方案。
我需要設置一種停止運行應用程序的方法(取決於應用程序設置),並在Log4Net停止記錄時發出警告電子郵件。
我爲我的附加目的地:
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<errorHandler type="SomeApp.PresentationLayer.Log4NetErrorHandler" />
<file type="log4net.Util.PatternString" value="H:\SomeApp-%property{RegNo}-log.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<header value="[START]" />
<footer value="[END]" />
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<!-- <appender-ref ref="A" /> -->
</root>
這是我的錯誤處理程序:
namespace SomeApp.PresentationLayer
{
class Log4NetErrorHandler : IErrorHandler
{
public bool HandleError(Exception ex)
{
//Trace.TraceError(ex.ToString());
ExceptionUtil.GetAndLogMessage(ex, "Log4Net Error in SomeApp", false, true);
return false;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
// Shield the unknown exception
FaultException faultException = new FaultException(
"Server error encountered. All details have been logged.");
MessageFault messageFault = faultException.CreateMessageFault();
fault = Message.CreateMessage(version, messageFault, faultException.Action);
}
}
}
無論我怎麼努力,異常處理程序永遠不會觸發。我將日誌文件設置爲映射的驅動器。當它正在記錄時,我斷開驅動器,它永遠不會向我的異常處理程序拋出異常。任何人都能看到我失蹤的東西?
我使用C#.NET 3.5的log4net 1.2.10
感謝提前任何幫助。
是的,這就是我想要的。我想在Log4net中處理錯誤,而不是在我的應用程序中。 Log4Net以出現錯誤時不會崩潰應用程序而聞名。問題是,我仍然需要使用Log4Net,但如果它停止記錄,我想要這些錯誤。它的默認模式是默默停止記錄。根本沒有通知。 –
我簡直不敢相信我錯過了解決方案。我混淆了log4net.Core.IErrorHandler和.net IErrorHandler。我應該從簽名中認識到它。感謝那個鏈接。 –