2011-12-28 172 views
3

我有以下問題。我們在兩個項目中使用log4j,它們託管在同一個GlassFish服務器上。每個項目都有內部的log4j.properties文件,該文件指向基於不同目錄的文件(我們將它們命名爲Project1Project2)。是否log4j線程安全?

現在,由於某些不清楚的原因,第一個項目的信息消息有時會寫入Project2日誌文件,反之亦然。我檢查了兩個項目的log4j.properties文件,沒有任何東西指向其他項目的日誌。

懷疑是因爲log4j實際上並不是線程安全的,因此如果兩個用戶在同一時間在兩個系統中工作,則記錄器的消息可能會混合在一起。這個懷疑是否正確?

+0

這聽起來更像是一個配置錯誤,而不是線程問題。 – 2011-12-28 05:43:34

+0

那麼,怎麼會這樣呢,兩個配置文件不同的項目會互相影響,如果每個配置根本沒有連接到其他項目日誌 – 2011-12-28 05:58:44

回答

5

是,log4j的是線程安全的:

是,log4j的是線程安全的。 Log4j組件被設計用於 大型多線程系統。

Ref

你所描述的聽起來更像是配置錯誤,而不是跨進程/線程問題。

3

是的,log4j是線程安全的。原因是方法AppenderSkeleton.doAppend()已同步。 但要小心配置編程! 例如,你不能在不同的appender中使用相同的TTCCLayout實例(閱讀javadoc)!看看PatternLayout方法格式()。它改變實例字段(StringBuffer sbuf),所以如果你在不同的appender中使用相同的PatternLayout實例,你將面臨競爭條件。 EnhancedPatternLayout更好,導致他們修改格式的方法。