2016-08-22 241 views
2

我一直在搜索Web和SO一段時間來找到我的問題的答案,但是我能找到的所有東西都解決了實現的多模塊項目Maven的。我的項目不使用maven,所以它不能幫助我的場景。在沒有maven的多模塊J2EE web項目中配置log4j2

我正在構建一個在Tomcat 8上運行的Java 8 J2EE Web服務項目,並分解爲幾個單獨的項目(請參閱下面的項目樹)。我沒有使用maven,我通過eclipse定義了所有的依賴關係(我希望能夠在某些時候瞭解maven並且「mavenize」我的項目,但我還沒有)。

我該如何實現以下功能: 有一個log4j2.xml文件可供動態Web項目和所有Java子項目使用。到目前爲止,唯一對我有效的工作是在項目的的每個的src文件夾中存在log4j2.xml文件的副本。 我已經嘗試了各種各樣的東西,比如將配置文件放在一個共享文件夾中,並將文件夾添加到每個項目的類路徑,或將文件放置在所有人使用的CommonLib項目中,但是每次不斷收到log4j警告,發現沒有配置文件。

這裏是我的項目樹:

Services (Dynamic web project) 
^
    |__ BusinessCore (Java project) 
    |  ^
    |   |___ DAO (Java project) 
    |   | ^
    |_________|_____|__CommonLib (Java project) 

回答

0

這聽起來像你試圖通過包含在類路徑中log4j2配置文件使用log4j2 automatic configuration

我進一步假設你正試圖從Eclipse中運行你的代碼。使用自動配置(不指定通過系統屬性指定配置文件的路徑)的唯一方式是如果log4j2配置文件位於構建路徑中包含的「源文件夾」內,或者如果將配置文件文件放入jar文件中,然後將該jar添加到您的構建路徑中。

因此,假設您使用的是log4j2.xml文件,如果將log4j2.xml放置在您的CommonLib項目的源文件夾內,並將此項目包含在其他項目的構建路徑中(以及必要的log4j2罐子)它應該工作正常。

下面是我設置了一個示例項目:

根級別項目文件夾的內容非Maven的網絡項目log4j2

enter image description here

BusinessCore的內容

enter image description here

內容CommonLib

enter image description here

注意「config」文件夾是源文件夾在Eclipse(您稍後也會再看到這一點),而且log4j2.xml包含在config文件夾。

構建路徑配置:

非Maven的網絡項目log4j2對BusinessCore項目

enter image description here

BusinessCore對CommonLib依賴的依賴(沒有截圖,這是與以前幾乎相同)

CommonLib有一個額外的源文件夾叫做config:

enter image description here

與此配置文件夾包含log4j2.xml文件:

enter image description here

每個項目都有其源文件夾一個簡單的類,其子項目引用的類。在非maven-web-project-log4j2項目中,有一個類引用了BusinessCore中的類,而在BusinessCore中有一個類引用了CommonLib中的類。每個班級都會生成一條log4j2消息。當我從根項目(非maven-web-project-log4j2)運行類時,我能夠看到所有的日誌,並且日誌具有我在log4j2配置文件中指定的模式,它證實了log4j2能夠找到其配置。

作爲最後一點 - 我添加了額外的「config」源文件夾,以強調您可以將log4j2配置文件放置在構建路徑中的任何源文件夾中的位置,因此無需爲此創建單獨的文件夾如果你不想 - 你可以把它包含在你的問題中已經提到的src目錄中。