2010-10-01 114 views
5

我在寫一個由幾個maven模塊組成的應用程序。他們都必須將東西記錄到自己的日誌文件中。我在每個模塊的main/resources文件夾中創建了一個log4j.properties文件。現在,當我從其中一個模塊啓動應用程序時,它會將所有內容寫入該模塊的日誌文件。我想知道是否這只是因爲它可能從該啓動模塊獲取了根目錄並用它來保存日誌文件,但是當我爲該啓動模塊創建appender(在log4j屬性中使用類別)和沒有rootLogger它給了我一個關於其他模塊中找不到它們的appender的類的錯誤,這表明沒有找到或讀取這些模塊中的每個模塊中的log4j.properties文件。任何人有任何想法如何解決這個問題,並使這些模塊使用這些屬性文件,或者我必須將所有appender放在一個大的log4j.properties文件中,導致所有日誌出現在該啓動模塊的根文件夾中,而不是那些其他模塊的根文件夾?來自每個模塊的Log4j屬性

我希望這個問題已經足夠清楚瞭解,否則請隨時詢問詳情。

+1

你可以提供更多關於你的應用程序的信息;例如它是一個網絡應用程序?它是否部署到應用程序服務器? – Qwerky 2010-10-01 14:56:44

+0

這個應用程序將每週運行以更新包含蛋白質數據的數據庫。首先它會檢查其他數據庫中是否有新數據,如果存在,它會讀取數據,並使用它進行一些計算(將數據發送到執行計算的特殊Web服務),然後從該Web服務獲取數據,然後將它輸入我的蛋白質數據庫。其中一個模塊是與我的數據庫交談的休眠模塊。我遇到的問題是,休眠類記錄它所做的一切。我想將這些日誌從其他模塊的日誌中分離出來。 – FinalArt2005 2010-10-04 10:33:32

回答

0

據我所知,只有被調用模塊的log4j.properties被默認讀取和初始化。

如果要從單個啓動模塊調用獨立模塊,則必須將所有appender添加到位於start-module/src/main/resources目錄中的單個log4j.properties文件。如果和當你想要這可能是一個架構問題。

只是一個建議:如果您現在或將來想要更高級的日誌控制,現在切換到基於XML的日誌記錄。

0

如果在每個獨立模塊的src/main/resources中包含單獨的log4j.properties,並且將生成的jar文件加載到單個類加載器中,則自從log4j從類加載器加載屬性文件後,將只加載一個資源您的資源在文件名中重疊)。

我不會在我的jar文件的任何中包含log4j.configuration文件。有兩個原因:

  • 不適用於您的情況。

  • 爲了配置log4j(編輯記錄器的詳細程度),我必須打開jar文件並編輯屬性文件。

一種不同的解決方案可以是使另一個模塊產生陰影(http://maven.apache.org/plugins/maven-shade-plugin/)罐子從其餘的模塊,包括在SRC /主/資源的單個log4j.properties文件。然後,如果您有另一個模塊將您以前的項目用作依賴項,則只能將其作爲依賴項包含在陰影項中。

但是,這是我不會使用的解決方案。

希望有所幫助。