目前,我擁有自己的日誌系統,其中日誌本質上是一個隊列,具有一個單獨的線程監聽該隊列並執行所有實際的寫入操作。系統處理日誌消息的TON,文件很容易在幾分鐘內超過10 MB大小,因此在調用線程中進行實際日誌記錄是不可行的。在單獨的線程上運行Log4Net appenders
我找不到在線資源,顯示線程在log4net中如何工作,如果log4net已經支持這種消息傳遞架構,或者其他類似的功能可以在線程環境中工作。是否有任何預先存在的功能可以幫助我?
這可能沒有創建一個log4net包裝?
目前,我擁有自己的日誌系統,其中日誌本質上是一個隊列,具有一個單獨的線程監聽該隊列並執行所有實際的寫入操作。系統處理日誌消息的TON,文件很容易在幾分鐘內超過10 MB大小,因此在調用線程中進行實際日誌記錄是不可行的。在單獨的線程上運行Log4Net appenders
我找不到在線資源,顯示線程在log4net中如何工作,如果log4net已經支持這種消息傳遞架構,或者其他類似的功能可以在線程環境中工作。是否有任何預先存在的功能可以幫助我?
這可能沒有創建一個log4net包裝?
如果您的日誌數據依賴於特定順序,您可能需要重新考慮線程方法 - 線程可能會干擾該方法,並最終不按順序發佈日誌條目。
您可能嘗試使用MSMQ(或某些其他隊列技術)將日誌消息快速發送到某個其他進程,然後再進行物理寫入存儲。這將保證消息以與發送的順序相同的順序顯示。
這不是一個壞主意。訣竅是排隊條目並將它們處理在單個隊列中。看一看http://www.drdobbs.com/visualstudio/225700095就是一個很好的例子。
您可以隨時查看log4net的源代碼,以瞭解這些問題。它是開源的。
在一個龐大的課程庫中挖掘有點困難。但是,搜索新線程返回沒有用處,搜索ThreadPool顯示一個appender,「排序」爲我的目的做了一些有用的事情,但沒有在標記附近。 猜猜我必須做我自己的appender。 :( – 2010-06-26 02:25:15
如果您使用的.NET Framework 4,您可以使用BlockingCollection保留日誌序列
我用ParallelForwardingAppender
和AsyncForwardingAppender
追加程序取得了巨大成功。這些追加程序是可從下面的存儲庫:
https://github.com/cjbhaines/Log4Net.Async
ParallelForwardingAppender
利用BlockingCollection和任務並行庫的其他方面來實現無損消息隊列。
AsyncForwardingAppender
在後臺線程上使用環形緩衝區和10ms輪詢週期來優先考慮應用程序性能而不是日誌保真度。
MSMQ非常重量級,尤其是這個。內存中的隊列就足夠了。 – 2010-06-25 16:20:55
內存中的隊列是我的記錄器當前實現的方式。我想我必須將它擴展到log4net幷包裝它。或者創建我自己的appender。 – 2010-06-25 16:26:03
由於他正在使用隊列,記錄的順序將與插入的順序相匹配,所以不會有問題。 – 2010-07-01 21:18:24