2014-06-23 58 views
0

我有一個C#應用程序當前使用log4net,其中一個新的需求要求用戶活動必須被記錄,如果沒有記錄日誌,應用程序必須停止。開箱即用,log4net是「不可靠的」,不會出現運行時異常。這可以覆蓋而不更改源代碼?log4net可以在表面異常的情況下做到「可靠」嗎?

According to the documentationand this related question),log4net的不會與不應表面例外:

號log4net的是不可靠的。這是一個盡力而爲和故障停止記錄系統。

通過故障停止,我們的意思是log4net在運行時不會拋出意外的 異常,從而可能導致應用程序崩潰。 如果由於任何原因,log4net會拋出一個未捕獲的異常( ArgumentException和ArgumentNullException可能被拋出), 請發送電子郵件至[email protected]郵件列表 。未捕獲的異常處理爲嚴重的錯誤,要求立即關注 。

此外,log4net的將不會恢復到System.Console.Out或當其指定的輸出流沒有被打開 System.Console.Error, 不可寫或變滿。這避免了由於日誌記錄失敗而導致用戶的終端淹沒工作程序的其他情況。 但是,log4net將向System.Console.Error 和System.Diagnostics.Trace輸出一條消息,指出日誌不能執行 。

是否可以配置或包裝log4net以確保如果發生異常,它將在運行時出現?

+0

一個選項是下載源代碼並進行自定義構建那不會吞下異常並拋出它們。有點麻煩,但如果其他選項不行的話可以工作。 - > https://logging.apache.org/log4net/source-repository.html –

+4

要小心諸如「必須記錄用戶活動」。這可能不是_logging_,而是用戶_auditing_。海事組織,審計應該在應用程序中明確處理,因爲通常有不同的一致性要求。 –

+0

+1 Davin,你說的沒錯。目標是審計,而不是日誌記錄。 (菜鳥錯誤)自從發佈這個問題以來,我設置了XML序列化消息被髮送出來供Splunk使用,其中包含我想要審計的變量:用戶名,日期時間等...如果未發送消息,則會引發異常,暫停用戶活動。問題解決了! –

回答

0

不可以,log4net保證寫入日誌消息。因此,log4net無法記錄您的需求中的用戶活動日誌記錄。當您正在考慮更改log4net源代碼以刪除它時,請勿啓動。有很多地方可以消除異常,使得新的日誌系統更加可靠。只需將logmessages直接寫到你想要的地方,並且由於你的要求,你將永遠不會使用log4net在過濾/不同appenders /日誌級別等方面給你的功能。

相關問題