2009-10-13 116 views
3

我讀了下面的文章: http://odetocode.com/articles/294.aspxC#創建日誌系統

本文提出了關於我的日誌了很多問題。 (我不知道我是否應該在單獨的問題中做出這個...但我不想用我的問題發送垃圾郵件stackoverflow.com)

第一個問題是如果我應該將它存儲在.txt文件中,或者.xml文件......或者甚至在數據庫中的表格中。 可能在.txt中保存性能會更好。但是當有人需要找到.txt文件時,它可能會成爲一個痛苦的脖子。 那麼......我應該使用哪一個,爲什麼?

第二個,有沒有什麼具體的類來處理「登錄」的事情? 我已經閱讀了關於這個主題的幾個主題,並且我沒有找到我的問題的答案。

在此先感謝。

回答

18

我過去採用的最簡單的方法是使用log4net。這樣你就可以在配置文件中配置日誌記錄。如果你需要它去一個數據庫,請將它設置爲這樣。如果您想在發生重大錯誤時收到通知,請按照這種方式進行設置。

就整理日誌而言,它實際上取決於您想採取的方法,以及您計劃記錄的程度。通常我登錄到一個平面文本文件,因爲我沒有在我的應用程序中啓用大量日誌記錄。所以通過它們解析並不是什麼大問題。

+1

log4net是驚人的 - 我強烈建議給它一個嘗試 – 2009-10-13 17:41:44

+1

電鋸+ log4net = Awsome。 – 2009-11-30 20:16:02

+0

好的叫詹姆斯。電鋸可以在http://logging.apache.org/chainsaw/index.html找到 – 2009-11-30 20:22:32

0

關於文件vs數據庫,這取決於你自己選擇。

文件日誌提供更高的性能,但存在訪問痛苦。

如果日誌很少提供信息(例如應用程序崩潰並且您需要知道原因),那麼最好將日誌存儲在文件中。

如果您想要訪問這些日誌,分析它們等,您應該將它們存儲在數據庫中。

.net實際上不是我的區域,但您爲什麼要使用框架的日誌記錄類有很多原因。

6

除非你想寫一個教育系統的系統,我老實說認爲你最好堅持log4netnlog

此外,您可能會更好地研究這些系統的代碼,而不是編寫自己的代碼。

至於你的問題,我會堅持一個文本文件並緩存消息,然後將它們分發到磁盤。

4

爲什麼打擾發明輪?您可以檢查MS企業庫日誌記錄塊。

2

絕對不是xml。

使用xml,您需要全部讀取它,解析它,添加任何內容,然後再次生成整個xml,然後將其寫回硬盤。每次你記錄一些東西。

除非您手動將節點附加到xml文件,這樣您就失去了大部分xml優點。

警告致命錯誤 - 無論將幫助您調試應用程序,如果它崩潰 - 我會存儲在txt文件中的那些日誌。 爲每個條目添加一個新行。

這種方式,你也可以要求你的用戶檢查出來(如果你通過電話幫助他)。

如果它不是元日誌,比如上面提到的,換句話說,如果它與程序本身有關,你可能需要分析 - 保持db。

0

對於我的應用程序,我選擇了寫入數據庫。它更容易(對我來說)以這種方式讀取日誌。然而,我不會像有些人那樣瘋狂地登錄,我只記錄我需要登錄的內容,而沒有其他內容。

我不久前給log4net一個鏡頭,根本不喜歡它。寫入數據庫併發送電子郵件是一大堆垃圾。我最終編寫了一個自定義的日誌記錄類,整個200行,只花了幾個小時。它工作的很好,我沒有另外的依賴,並且它可以很容易地改變。

+0

它在loggin數據庫錯誤方面有什麼優點? :P(Ref DNR 500) – 2009-11-30 14:01:32

+0

它不會告訴我給出的錯誤,但它會告訴我查詢崩潰了,並且記錄給查詢的值是什麼。我從來沒有一個不能被複制的。 – corymathews 2009-11-30 14:47:06

0

如果你正在處理ASP.NET,ELMAH是另一個很好的日誌記錄工具。這顯然是微軟的Scott Hanselman uses。但是,需要一些additional code才能使其與ASP.NET MVC的HandleError屬性一起工作。