2013-04-25 44 views
0

我在.NET中有一個需要記錄的應用程序。我想記錄某些事件和例外情況。我在網上看到log4net被大量推薦用於此目的。我將其設置爲快速開始記錄到一個txt文件。生成日誌的應用程序中的實時日誌監控

但是這對我的目的不夠好。從我的應用程序中,我希望能夠拔出一個監視器,其中包含生成的所有日誌的實時列表。

如果log4net是最好的方法呢?如果不是,那是什麼?

我沒有問題消耗日誌事件,並找到我自己的方式來顯示數據,我只是不知道什麼是最好的方式是將日誌事件發送到我的監視器表單。

回答

2

你可能想看看log2console,這是一個優秀的日誌記錄監視器與log4net兼容。它可以監聽log4net remoting appender並且很好地呈現數據。

如果你需要從程序內部實現你自己的顯示器,我會建議嘗試MemoryAppender。有一些有用的信息here(這個問題實際上是一個很好的教程)

正如你所看到的,他已經設置了兩個appender--一個是登錄到文件,另一個是登錄到內存appender。在您的顯示器,您可以使用下面的代碼獲得一個句柄的appender:

Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy; 
MemoryAppender mappender = hierarchy.Root.GetAppender("MemoryAppender") as MemoryAppender; 

你可以cycically得到在後臺線程中的新事件與mappender.GetEvents(),與mappender.Clear()清除之前。請記住,這不是線程安全的,因此爲日誌記錄創建線程安全包裝可能是一個好主意。

+0

什麼部分不是線程安全的?你是說'GetEvents()'不是線程安全的,因爲可能有事件被記錄?與Clear()相同?這似乎正是我正在尋找的,但線程安全的東西讓我擔心。我的計劃是要有一個窗體計時器,每五秒鐘打一個表格。每五秒鐘我會調用'GetEvents()'然後'Clear()'。然後我會將這些事件顯示到窗體上,並等待下一個計時器打勾。你是說這可能是不安全的? – 2013-04-25 11:25:55

+0

使用多線程是安全的,但如果在GetEvents調用和Clear調用之間記錄了任何內容,則可能會丟失一些日誌消息。如果你爲log4net創建一個包裝,其中所有的日誌+對appender的訪問都是由一個鎖來控制的,那麼你無論如何都可以 – havardhu 2013-04-28 08:08:45