2013-10-17 40 views
0

我有一箇舊版的日誌記錄類。它有一個靜態Logger引用(名爲logger)和一堆靜​​態方法。即時切換FileAppenders

每種方法都接受一個字符串輸入,並將其寫入System.out.println並記錄器,如果記錄器不爲空。

它有一個初始化記錄器的構造函數。但是這個構造函數只有包的範圍,我很確定它沒有被調用。因此,記錄器始終爲空,並且該類實際上只有執行System.out.println

我想更改它,以便它可以用於多線程應用程序,其中每個線程寫入其自己的唯一FileAppender。

這就是我卡住的地方。

基本上,我想要做的就是讓這個靜態類與一堆不同的log4j FileAppenders相關聯。每個FileAppender可以由線程創建,並且文件名可以從線程已知的唯一信息中派生。

我無法弄清楚如何做的是神奇地使用Log4j來將Thread的獨特FileAppender與這個傳統的日誌記錄類進行通信。

想法?提示?建議?

馬克

回答

0

它可以動態改變使用RoutingAppender和ThreadContext地圖目標日誌文件名。

這可以通過配置完成(不需要線程創建FileAppenders的自定義代碼)。在RoutingAppender配置中,您可以指定要用來切換目標FileAppender的ThreadContext項。例如,您可以使用字符串「ROUTINGKEY」。每個線程在ThreadContext映射中爲鍵「ROUTINGKEY」放置一個唯一值,並且該值用於選擇日誌事件路由到的Appender。您甚至可以將其設置爲動態創建文件名中具有ROUTINGKEY值的日誌文件,因此不需要事先知道所有目標日誌文件。

FAQ頁面有一個很好的例子:http://logging.apache.org/log4j/2.x/faq.html#separate_log_files