2011-06-16 21 views
1

我需要在Windows應用程序中啓用登錄。哪個日誌框架是最好的推薦之一? 是否有任何框架不需要用戶手動輸入每個日誌條目?在Windows應用程序中自動登錄

logger.Info("I don't want to write a log entry like this."); 
logger.Debug("I don't want to write a log entry like this also."); 
logger.Fatal("Is there any way to avoid this kind of manual log entry writing?"); 

除log4net之外是否還有其他任何記錄器框架,以便我可以實現此目的?或者是log4net能夠做到這一點?

+0

您是否在尋找一個猜測您想要登錄的日誌庫?值得添加這個作爲log4net功能請求... – 2011-06-16 11:54:45

+0

@ gigantt.com:我的意思是:現在無論我們在一個寡婦操作系統上做什麼都被捕獲並登錄到本地機器的事件查看器應用程序日誌中。所以我想知道是否有任何類似的日誌記錄框架.. – Sandeep 2011-06-16 11:57:29

+0

那些事件查看器錯誤並不奇蹟般地到達那裏(微軟很好,但不是那麼好)。微軟可能有類似於上面的代碼。 – 2011-06-16 12:02:06

回答

0

@ user762730:你問如何將消息記錄到機器的事件日誌中嗎?如果是這樣,你可以完成很少的代碼行。

if (!EventLog.SourceExists("Application Name")) 
    EventLog.CreateEventSource("Application Name", "Application"); 

var myLog = new EventLog { Source = "Application Name" }; 
myLog.WriteEntry(errorMsg + ex.Message + "\n\nStack Trace:\n" + ex.StackTrace); 

EventLog類型位於System.Diagnostics命名空間中。

0

記錄不會「自動」發生,因爲您始終必須告訴系統記錄什麼(無論您在哪裏登錄)。 「自動」部分是您可以使用變量記錄項目。例如,log4net(和其他日誌引擎)允許您將異常甚至整個堆棧跟蹤記錄到您選擇的日誌存儲庫。通過這種方式,您可以記錄所有類型的錯誤,而無需手動輸出錯誤文本。但是,您仍然需要將logger.Error(...聲明放入您的catch塊中。

您還可以使用內置的字符串格式來填充自定義來源的消息。例如,我有一個創建帳戶的應用程序。我有一個INFO日誌消息記錄誰正在創建。我這樣做是在一個類似的方式建立一個字符串:

logger.Info("Creating account for {0}", textblockUserName.Text); 

在文本塊中包含的人的用戶名被創建。這樣我就有一個條目每次寫入都會有所不同。這使得您的日誌記錄更加靈活,但它仍然歸結於添加寫入記錄器的條目。

如果你想模仿微軟用他們寫入事件日誌的信息做什麼,這就是實現它的方法。微軟沒有任何跟蹤他們正在做什麼的自動化系統。他們必須具體告訴他們的應用程序記錄什麼時間和什麼時候。你需要在你的應用程序中做同樣的事情。

相關問題