我在log4j中有这一行:
log4j.appender.FILE.File = $ {的catalina.home} /logs/debug.log
从IntelliJ运行项目时效果很好。
但是当我尝试运行TestNG测试(来自maven)时,它失败了:
log4j:ERROR setFile(null,true)调用失败。 java.io.FileNotFoundException:/logs/debug.log(没有这样的文件或目录)
我可以对路径进行硬编码,一切都会很好。但是我不想要那个解决方案,因为我可以在$ {catalina.home}位于不同位置的各种系统上进行部署。
我在mac上开发并部署在freebsd和centos上。 Tomcat一直在不同的地方。我可以使用/var/log/myapp.log但是......
是否可以使用日志文件路径定义公共变量(在IntelliJ中可用以及何时运行maven测试)?
答案 0 :(得分:2)
为了让log4j属性文件在从maven运行测试时获得$ {catalina.home}的正确值,它需要位于由maven过滤的文件中(src / main / resources是一个目录,用于这样的文件)。此外,变量'catalina.home'需要在maven中设置。您可以创建一个使用环境变量的变量AKA maven属性,以便为每台计算机上的tomcat安装定义不同的位置:
<properties>
<catalina.home>${env.catalina.home}</catalina.home>
<properties>
答案 1 :(得分:2)
请尝试使用the Maven Profile,该Maven Surefire Plugin:Using System Properties会在${env.catalina.home}
不存在时与the Maven Properties一起激活。
<profile>
<id>mock-catalina-home</id>
<activation>
<property>
<name>!env.catalina.home</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration>
<encoding>UTF-8</encoding>
<systemProperties>
<property>
<name>catalina.home</name>
<value>PATH_TO_CATALINA_HOME</value>
</property>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
</profile>
请注意,PATH_TO_CATALINA_HOME
也可以由{{3}}推荐。 e.g。
<systemProperties>
<property>
<name>PATH_TO_CATALINA_HOME</name>
<value>${my.dev.catalina.home}</value>
</property>
</systemProperties>
这有助于我们将${my.dev.catalina.home}
定义为各种值。
我希望这可能有所帮助。
答案 2 :(得分:0)
您还可以指定日历文件相对于您的用户帐户的主目录的位置。
在log4j中,这将使用以下格式:$ {user.home} /weblogs/log4j1.log
在log4j 2中,这将使用以下格式:$ {sys:user.home} /weblogs/log4j2Rolling.log
log4j 2可以使用Java系统属性,环境变量或Maven属性