2010-06-25 92 views
4

目前,我擁有自己的日誌系統,其中日誌本質上是一個隊列,具有一個單獨的線程監聽該隊列並執行所有實際的寫入操作。系統處理日誌消息的TON,文件很容易在幾分鐘內超過10 MB大小,因此在調用線程中進行實際日誌記錄是不可行的。在單獨的線程上運行Log4Net appenders

我找不到在線資源,顯示線程在log4net中如何工作,如果log4net已經支持這種消息傳遞架構,或者其他類似的功能可以在線程環境中工作。是否有任何預先存在的功能可以幫助我?

這可能沒有創建一個log4net包裝?

回答

1

如果您的日誌數據依賴於特定順序,您可能需要重新考慮線程方法 - 線程可能會干擾該方法,並最終不按順序發佈日誌條目。

可能嘗試使用MSMQ(或某些其他隊列技術)將日誌消息快速發送到某個其他進程,然後再進行物理寫入存儲。這將保證消息以與發送的順序相同的順序顯示。

+0

MSMQ非常重量級,尤其是這個。內存中的隊列就足夠了。 – 2010-06-25 16:20:55

+0

內存中的隊列是我的記錄器當前實現的方式。我想我必須將它擴展到log4net幷包裝它。或者創建我自己的appender。 – 2010-06-25 16:26:03

+0

由於他正在使用隊列,記錄的順序將與插入的順序相匹配,所以不會有問題。 – 2010-07-01 21:18:24

1

您可以隨時查看log4net的源代碼,以瞭解這些問題。它是開源的。

+0

在一個龐大的課程庫中挖掘有點困難。但是,搜索新線程返回沒有用處,搜索ThreadPool顯示一個appender,「排序」爲我的目的做了一些有用的事情,但沒有在標記附近。 猜猜我必須做我自己的appender。 :( – 2010-06-26 02:25:15

0

如果您使用的.NET Framework 4,您可以使用BlockingCollection保留日誌序列

0

我用ParallelForwardingAppenderAsyncForwardingAppender追加程序取得了巨大成功。這些追加程序是可從下面的存儲庫:

https://github.com/cjbhaines/Log4Net.Async

ParallelForwardingAppender利用BlockingCollection和任務並行庫的其他方面來實現無損消息隊列。

AsyncForwardingAppender在後臺線程上使用環形緩衝區和10ms輪詢週期來優先考慮應用程序性能而不是日誌保真度。

相關問題