2013-10-13 28 views
1

我需要將1個批處理應用程序拆分爲3個不同的文件。代碼幾乎是一樣的,我剛剛修改了ANT構建腳本,並排除或包含了不同應用程序的一些依賴關係。比我爲每場戰爭設置了不同的web.xml。每個web.xml爲不同的行爲定義了不同的bean和不同的bean。如果戰爭不同,將相同的類記錄到不同的文件

所有的戰爭一個Tomcat服務器上運行。應用程序使用log4j,但現在我重構它來使用slf4j代替。以爲我仍然需要在slf4j下使用log4j。

我的問題是,每個應用程序日誌必須出現在不同的日誌文件, 即使類名是相同的。

  • 我無法編寫不同的log4j.properties文件,因爲管理員將它放在所有應用程序的tomcat/lib文件夾中。
  • 我曾嘗試初始化Servlet時放置在Tomcat的/ lib和更改配置文件名3個文件爲每個應用程序,但它改變了在同一時間的所有應用程序。

我現在唯一能想到的解決方案是將log4j-over-slf4j打包,創建3個不同的slf4j日誌工廠,爲每個日誌名添加一些前綴。舉例來說,如果我有這樣的記錄:

private final Logger logger = LoggerFactory.getLogger(MainProcessor.class); 

每個日誌工廠將genarate這些登錄名(與前綴APP1,APP2和APP3):

app1.com.test.MainProcessor 
app2.com.test.MainProcessor 
app3.com.test.MainProcessor 

有沒有什麼更好的辦法來處理這個問題?

回答

0

嘗試使用鉤子方法,火災事件等,所以記錄不會在跨應用程序共享類的情況發生,但在某些(上)班是每個應用程序獨一無二的。
變化是靜態訪問某些日誌類,使用單等,從那裏應該發生的日誌記錄類,但設置上下文日誌記錄類的應用程序初始化。

+0

我考慮類似的解決方案,但也有大約10將每個應用程序,和量可以根據配置改變,所以我不能使用一個唯一的類。 第二種解決方案是另一種選擇,但我不能決定它是否比我的工廠解決方案更好。這不需要建造額外的罐子,但我將不得不修改所有類別,使得記錄器變得更加困難,並且必須管理額外的單獨課程。 – arminas

+0

您可以爲每個應用程序或單例使用一個類,因爲您可以使用調用者和應用程序的知識來獲取記錄器。另一件事 - 你有沒有考慮以編程方式設置配置?這可以使用文件或屬性實例來完成。 – alterfox

相關問題