2016-03-21 33 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

相关问题