什麼是登錄多線程環境的最佳方式和最佳工具,以便每個線程都有自己的記錄器實例和單獨的文件。這甚至有可能嗎?在java中登錄多線程應用程序
回答
您的列表可能會嘗試使用自定義的Log4j追加,這需要線程ID作爲參數,並篩選基於什麼的線程調用它的消息。動態創建它,將其附加到記錄器。
有多種問題,這種方法雖然:
- 太多追加程序會記錄
- AppServers通常有一個線程池放緩。這意味着隨着時間的推移,相同的線程將參與執行完全不相關的請求,這些請求將以相同的日誌文件結束。
我建議你考慮一個更簡單的方法:將線程ID記錄到同一個日誌文件中。它快速簡單,log4j有一個%標誌來做這件事。稍後,您可以根據需要對每個線程ID進行grep/split日誌文件。
更新:
其實,你可能有一個自定義的附加器,這將打開按需日誌文件時,一個新的線程日誌記錄(該附加目的地線程上下文中執行,只需要調用線程。 currentThread()。的getName())。但是你必須重新實現所有常用的日誌文件任務(循環),或者將它委託給每個文件的標準appender。
我有一個標識在日誌文件中的每個線程多線程應用程序(不知道關於複式文件,單個文件顯示我的併發性),識別該線程日誌框架自動完成的,它是Log4J
編輯:沒有什麼需要在代碼中添加的,你只是在記錄儀的配置附加器,包括[%線程],將確定要從中記錄的當前消息的線程,這是例子來自log4net的:
<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
下面是其他常見Java logging frameworks
當然我們都知道log4j,但如果你說這是可能的,你可以告訴我們簡單的實現來使用log4j來做到這一點。 – mabuzer 2010-06-24 10:52:44
在某些情況下,知道線程標識符遠不如知道執行上下文重要。對於大量的線程和更大的應用程序來說,情況尤其如此。當線程標識改變時,你會做什麼,但實際的執行上下文實際上是相同的(就像線程池中提到的那樣)?我寧願使用MDC (mapped diagnostic context)來跟蹤日誌中的執行上下文。這更好,因爲你控制了上下文的內容。最後,您可以設置日誌的佈局以包含MDC,然後輕鬆篩選出相關的內容。查看this tool,它用MDC做了很多事情。
- 1. 在多線程應用程序中登錄
- 2. 與多線程一起登錄多進程應用程序
- 3. 在java應用程序中登錄
- 4. 記錄在多線程應用程序
- 5. Java中的多線程應用程序?
- 6. Windows 8.1應用程序離線登錄
- 7. 登錄到使用Java應用程序
- 8. 分析多線程Java應用程序
- 9. 在線應用程序的多個登錄位置
- 10. java多線程應用程序:正在線程阻塞時間
- 11. 單點登錄Web應用程序Java
- 12. MySql登錄從Java應用程序
- 13. 登錄Java桌面應用程序
- 14. SLF4J是否適合在多線程應用程序中登錄到數據庫?
- 15. 單點登錄Java中的多個Web應用程序
- 16. 在應用程序中登錄多少,多少錢太多?
- 17. 一個在應用程序中登錄的web應用程序
- 18. 線程Java應用程序
- 19. 應用程序與Facebook登錄登錄
- 20. java:多線程,多用戶web應用程序中的FTP
- 21. 在Prism WPF應用程序中登錄
- 22. 在我的應用程序中登錄
- 23. 在Android中登錄應用程序
- 24. Bypassing在Android應用程序中登錄
- 25. 在多線程應用程序中記錄框架和同步
- 26. 多線程應用程序
- 27. 使用servlet在Java EE應用程序中登錄用戶
- 28. 登錄Facebook應用程序
- 29. 登錄web應用程序
- 30. Android應用程序登錄
請參閱http://stackoverflow.com/questions/8226615/how-to-use-log4j-in-multithread-using-java – Benj 2013-03-22 15:38:47