2012-08-08 51 views
3

爲了詳細說明,我有一個運行Java 1.6.0_27的Tomcat服務器版本7.0.27。tomcat,2個webapps,2個log4js,但兩個應用都登錄到一個文件

我有兩場戰爭,每次都有自己的log4j jar,也使用slf4j和slf4j-log4j。每場戰爭都有自己的配置文件(log4j.xml)。

war 1應該使用文件log-1.log,war 2應該使用文件log-2.log,但兩者都要登錄到log-1.log。

我檢查了tomcat安裝中沒有其他log4j jar,所以我不確定問題出在哪裏。我也關閉了共享類加載,但沒有任何區別。我的下一步是打開詳細的類加載器日誌記錄和/或開始調試log4j,但也許這裏有人知道這是爲什麼,並可以節省我一些時間。感謝您的任何意見。

更新:

好吧,我想我得到了這一個。 log4j xml文件很好。做了一個詳細的:類後,我可以看到log4j.jar只能從Web應用程序中加載一次。

我正在使用Documentum。他們有一個運行時jar需要使用他們的庫,這是一個帶清單文件的空jar。清單指向一堆罐子。換句話說,他們不使用maven ...無論如何...其中一個jar恰好是在Documentum安裝中找到的logj4。所以看起來兩個webapps都在使用那個。我認爲這是問題。待確認...

+1

您可以請將配置發佈到您的logf4.xml文件中嗎?你需要設置多個appender。 – 2012-08-08 09:59:33

+0

如果您將Documentum的運行時jar放置在頂級類路徑中,並且該運行時jar引用了log4j.jar,那麼它只會加載一次。不過,您不必使用該運行時jar。都是您的.war文件Documentum應用程序? – davidfmatheson 2012-08-08 13:08:35

+0

其實只有一個人使用Documentum。在生產中,這是在兩個獨立的服務器上,儘管在我們的開發環境中它是一樣的。但是我已經做到這樣,只有使用Documentum的人才能獲得Documentum jar,並確實解決了問題。 – rozner 2012-08-08 13:36:42

回答

1

如果您將Documentum的運行時jar放置在頂級類路徑中,並且該運行時jar引用了log4j.jar,那麼它將只加載一次。不過,您不必使用該運行時jar,也可以只在Documentum .war中使用它,如果其中一個不是Documentum。

0

你不發表您的屬性文件,但我能想到的一些原因:

  1. 您沒有寫入到不同的文件一個appender,即你需要appender1寫入log1.log和appender2寫入log2.txt
  2. 您有appender設置正確,但兩個應用程序都使用相同的記錄器,因此它們都寫入相同的文件。
  3. 你有2個記錄器,每個都有自己的附加目的地,但在你的代碼中沒有初始化正確的記錄:

    //there is no logger called com.sample, so it defaults to root logger that has appender that writes to log1.txt  
    Logger logger = Logger.getLogger(com.sample.MyClass.class); 
    

如果您發佈屬性文件和你的記錄器初始化代碼它」會更容易幫助你。