CATALINA_HOME和Maven + LOG4J

时间:2013-04-04 21:22:57

标签: maven log4j

我在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测试)?

3 个答案:

答案 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属性