2016-07-07 55 views
1

我們正在討論在我們的系統中實施Log4Net。 我曾經和它一起工作,我認爲這很有用,我的朋友問,與發生異常時寫入我們的數據庫相比,使用它的優勢是什麼?爲什麼使用Log4Net而不是寫入我的數據庫?

例如與log4net

catch (Exception ex) 
      { 
       log.Error("UserNamePasswordStatus.NotExist", ex); 
      } 

,並與我們的代碼:

catch (Exception ex) 
      { 
       _Params.Add("?Exception_", ex); 
       DataAccessMgr.Instance.ExecProcedure("insert_AppLog", _Params, false);     
      } 

我應該怎麼回答他呢? thx

+0

例如,因爲你沒有數據庫?或者是因爲一些網絡錯誤導致您無法將錯誤消息寫入數據庫?儘管有許多可能的原因。 – HimBromBeere

+3

簡單 - 當例外情況是數據庫不可用時會發生什麼情況。 –

+1

出於同樣的原因,您使用任何庫,因此您不必編寫和測試其他人已有的代碼。 (我假設您打算使用Log4Net將您的日誌寫入您的數據庫)。 – juharr

回答

1

你可以說同樣的事情用寫文件...但我認爲主要的原因是:爲什麼要重複的東西,如果你可以重複上面的庫。

你從簡單的「登錄」到你的數據庫...然後你說...嗯...我想添加時間戳,所以你改變你的表...然後你認爲...知道它來自哪裏是有用的......我應該改變我的日誌記錄以跟蹤這個......然後你說......然後......但是然後你記得......並且它繼續前進。

個人而言,我發現NLog更容易,log4net。該項目更多的活動,更多的鐘聲和口哨聲(這裏是:how to get started文章)。我真的很喜歡使用記錄器,因爲我可以將一些消息重定向到一個文件,並有一些消息pop notifications on my desktop by simply configuring the logger。您可以繼續使用示例,但是直接寫入數據庫有什麼意義?
難道你沒有一個DB包裝開始,只是爲了避免這一點?

+0

我們確實有一個DB包裝器,我認爲Log4Net比它有一些優勢,所以我們可以停止使用該包裝器並使用Log4Net。 –

+1

完全一樣的想法。它使你的行爲意圖更清晰:'Log.Error(something_bad_happened)'。你知道它正在記錄它。比'myDbWrapper.Log(something_bad_happened)'清潔得多。如果你想快速地嘲笑某些東西並在你的控制檯應用程序中看到結果,那麼怎麼樣?你如何用你的數據包封裝來做到這一點? – Noctis

1

這是個人選擇,但是Log4Net管理文件系統中的日誌(在您的磁盤中),所以如果您沒有數據庫來記錄錯誤消息,那麼您可以嘗試。儘管如此,我發現在大多數企業應用程序中,人們選擇在數據庫中記錄錯誤而不是在文件系統中進行更好的審計

同樣,如果您使用的NLog寫在Log4Net(在NuGet中可用),那麼您可以使用相同類型的語法記錄數據庫中的錯誤。

log.Error("UserNamePasswordStatus.NotExist", ex); 
+1

您不需要NLog將日誌寫入數據庫。 Log4Net能夠自行登錄到數據庫。 – juharr

+0

@juharr,這是很好的知道,但我以前使用'log4net'只是登錄文件系統。 – Rahul

+0

正如你已經說過的:「這是一個個人選擇」,使這個問題成爲「基於主觀意見的」。 – HimBromBeere

1

使用Log4Net比傳統方式將日誌轉儲到DB/Event Viewer中顯然有更多的優勢。它可以用更少的數量來實現。適用於大型和小型應用程序的配置步驟。

有趣的一點是,它可以在每個級別進行自定義,使其更可靠的日誌記錄。我喜歡滾動機制的功能(按大小,按日期等)。

相關問題