2009-04-07 80 views
2

我有一個.NET Windows應用程序,通過ClickOnce部署到Web服務器。在任何時候都有大約100個用戶,都位於中心位置。我使用log4net在應用程序中登錄,但我無法到達放置日誌的最佳位置。在哪裏寫Windows日誌應用程序

我試圖讓他們寫入到一個共享的網絡位置,但有些用戶遇到差I/O與方法。我已經嘗試登錄到用戶的臨時文件夾,但這使得檢索日誌變得更加困難。我沒有嘗試過事件日誌,因爲我可能不得不跳過一些環節才能實現這個目標,而且我不確定它是否值得。我從來沒有嘗試過數據庫日誌記錄,但我一直認爲它會比較慢。

有誰在部署在企業環境中的Windows應用程序日誌記錄的經歷嗎? (1)快速,(2)可靠,以及(3)可訪問的任何建議,我可以把日誌放在哪裏?

回答

2

數據庫日誌記錄的問題不是速度:這是可靠性。當出現問題時記錄日誌,如果出現問題,那麼無法訪問的數據庫的可能性不會對您有利。

一般來說,你想寫一個本地文本文件其他地方像網絡共享或數據庫。如果您遇到IO /速度問題,可以使用該文本文件作爲緩衝區,並批量將日誌寫入競爭資源。然後你定期刷新本地的'備份'日誌。

+0

你知道是否可以配置log4net來做到這一點? – 2009-04-07 21:02:17

+0

我知道你可以配置它記錄到數據庫或newtork共享_and_本地文件。我不知道你是否可以把它交給批處理/緩衝區日誌。我懷疑它會像我描述的那樣完成它,但你可以直接在你的應用程序中構建刷新/恢復邏輯。 – 2009-04-07 21:08:02

1

ApplicationData文件夾怎麼樣?在Vista中,這將是這樣的:

C:\用戶\雷\應用程序數據\本地\ MyCompanyName

如果你想有一箇中心位置,我會與數據庫日誌去。但正如Joel所說的,你需要一個始終有效的本地位置(或者接近它的位置)和一箇中心位置來收集日誌,以便在事情正常運行時進行。

+0

他很擔心集中收集他們。 – 2009-04-07 20:33:11

0

如果應用程序是一個典型的兩層工作,記錄到數據庫AdoNetAppender可能是合適的。 AdoNetAppender將日誌消息分成多達100個的塊,儘管您可能希望將其配置爲在至少WARN嚴重性事件上寫入。

你也可以考慮登錄到所有用戶的應用程序數據目錄,雖然這可能使它同樣笨拙的檢索日誌。也許考慮在某處添加快捷方式?

最後,如果日誌訪問性問題,您的組織中一個共同的主題,你可能要考慮一個日誌收集的應用程序,如Splunk

2

log4net的支持database appenders一些主要的數據庫。如果您有合適的數據庫可用,這可能是更好的選擇。但請小心,因爲如果管理不當,可能會降低應用程序的可靠性。

您可以通過使用BufferingForwardingAppender批量您的網絡日誌使用它與本地文件記錄相結合,只有當你超過某一閾值的消息發送。這樣,您就可以擁有足夠的上下文來跟蹤錯誤,但只有在發生錯誤時纔會發生。

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> 
<bufferSize value="1024" /> 
<lossy value="true" /> 
<evaluator type="log4net.Core.LevelEvaluator"> 
    <threshold value="ERROR"/> 
</evaluator> 
<appender-ref ref="DatabaseAppender" /> 

0

你可以嘗試某處的CommonAppData文件夾下 - 即CommonAppData \ YourAppName \日誌 - 只要你確保大小限制和/或定期清理。人們習慣於定期清理臨時文件夾,但要注意在CommonAppData,AppData或LocalAppData周圍開始挖掘。

寫在其他地方,但在這裏或溫度將遲早讓你在Vista和更高的麻煩。

如果日誌不重要,即如果有人刪除日誌時不會失去不可替代的數據,我肯定會去Temp中的一個子文件夾,並有一個單獨的任務計劃程序作業上傳它們。這是最痛苦的地方。

2

我用ms sql數據庫使用log4net。如果可能的話,我通常會在不同的服務器上放置一個專用數據庫。這樣,如果應用程序服務器或數據庫出現問題,我不會丟失日誌記錄。

速度從來都不是問題。

1

您可以使用本地日誌記錄的組合,並且可以在成功註銷時將日誌同步到中央數據庫。

這取決於你想要做什麼樣的日誌記錄以及你的應用程序是如何運行的。如果執行日誌記錄的應用程序是客戶端應用程序,那麼如果您寫入事件日誌,它可能沒有幫助。

如果你想寫入事件日誌,這是相當直截了當:

http://support.microsoft.com/kb/307024

還有一件事,如果你正在尋找您知道用戶的位置訪問肯定,你可以使用獨立存儲,但是你試圖寫入一個共享文件夾的事實讓我覺得你需要一箇中心位置來存儲你的日誌,在這種情況下,數據庫可能是你最好的選擇,我的最高建議可能是最適合你。

0

在我們的應用程序中,我們使用log4net併爲CommonAppData目錄(C:\ Documents and Settings \ All Users \ Application Data \ Company \ Product)中的所有用戶使用通用日誌文件。在這種情況下,我們的安裝程序必須手動設置目錄和日誌文件的文件權限,以便所有用戶都可以訪問它,默認權限僅適用於安裝應用程序的用戶。

我們還使用頂級異常處理程序(使用類似於http://www.wintellect.com/cs/blogs/jclark/archive/2005/03/30/simple-main.aspx的實現)將未處理的異常(如果可以的話)記錄到事件日誌中。我們使用事件日誌,因爲所有的賭注都是關於打開的文件流的狀態。同樣,我們的安裝程序必須在應用程序事件日誌中設置事件日誌源。

如果確實使用事件日誌,請確保您的日誌記錄非常小。如果您記錄了很多事件,因爲事件日誌可以很快填滿,並且XP上的默認策略是事件日誌在日誌已滿時開始刪除事件,並且默認大小相對較小(512 KB,並且只覆蓋超過7天的事件)。

相關問題