2016-03-21 60 views
0

我一直在掙扎了很多得到這個工作。 Log4j2文檔要求定義log4j.configurationFile系統屬性以定義自定義配置路徑。我在pom.xmlLog4j2的ConfigurationFile系統屬性只有行家在工作測試

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <excludes> 
      <exclude>**/RequestMetricsTest.java</exclude> 
      <exclude>**/SessionMetricsTest.java</exclude> 
     </excludes> 
     <systemProperties> 
      <property> 
       <name>log4j.configurationFile</name> 
       <value>src/main/resources/metrics-log4j2.xml</value> 
      </property> 
     </systemProperties> 
    </configuration> 
</plugin> 

定義這個屬性這個完美的作品,當我運行mvn install它執行測試用例,並登錄到我在配置中定義的文件。然而,當我在我的web應用程序將這個內置罐子它沒有記錄任何和不斷拋出約log4j2配置XML錯誤未找到。

問題:是否有任何其他地方我需要定義此係統屬性?

注:我沒有在我的項目web.xml

+0

你在哪裏設置上面的systemProperties部分?在確定的maven插件?你能否分享更多的POM文件? –

+0

是的,它在surefire maven插件中定義。更新問題。請看看。 –

+0

比正常情況下只適用於測試階段。爲什麼必須將其稱爲metrics-log4j2.xml而不是log4j2.xml? –

回答

1

您指定的系統屬性作爲Maven的Surefire插件,它僅適用於執行測試的一部分,這就是爲什麼在配置不是爲最終應用程序可見。

但是,配置文件被置於/src/main/resources之下,因此它仍將與項目工件一起發貨(打包)。但它沒有標準(默認)名稱,因此log4j2需要另外一個參數才能指向它。

official F.A.Q. page

默認的Log4j會在classpath中名爲log4j2.xml一個配置文件(不log4j.xml)。
歐也可以用這個系統屬性指定配置文件的完整路徑:
-Dlog4j.configurationFile=path/to/log4j2.xml

如果你想將它應用到你的Web應用程序,根據official documentation,你應該添加下列到你web.xml文件

<context-param> 
    <param-name>log4jConfiguration</param-name> 
    <param-value>/metrics-log4j2.xml</param-value> 
</context-param> 

但既然你提到你沒有一個web.xml文件在您的項目(怎麼來的?),你可以簡單地將其重命名爲它的默認名稱(從metrics-log4j2.xmllog4j2.xml),並應自動識別。

+0

感謝您的詳細解釋。實際上,我正在工作的部分不需要web.xml。當然,整個項目都有一個web.xml。通過你的解釋,我發現我需要在web.xml中進行更改。再次感謝! –

1

Surefire插件在構建的生命週期的測試階段時才使用。此處設置的系統屬性僅用於在Maven構建期間注入,而不是在應用程序運行時注入。

一旦編譯並運行JAR,它將使用主機的系統屬性或您傳遞的參數作爲參數。

比如你開你的JAR一樣:

java -jar myjar.jar 

您可以設置log4j的屬性:

java -Dlog4j.configurationFile=src/main/resources/metrics-log4j2.xml -jar myjar.jar 

在一個側面說明:

systemProperties已被棄用。

能不能請你用systemPropertyVariables來代替。

文檔可在這裏: https://maven.apache.org/components/surefire/maven-surefire-plugin/examples/system-properties.html

+0

好的,我會做出改變並嘗試。但是有幾個問題,爲什麼它會在maven測試中起作用?並且,在'pom.xml'中添加這個足以讓日誌工作?對不起,這些noob問題。我是第一次這樣做。 –

+0

無論如何它將無法正常工作,它將繼續僅適用於測試階段 –

+0

已更新的答案及所需的信息。對不起,我保存太快了! – timothyclifford

相關問題