2

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

4

3 回答 3

3

请尝试使用不存在时将激活的 Maven Profile以及Maven Surefire Plugin:Using System Properties${env.catalina.home}

<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>

请注意,Maven 属性PATH_TO_CATALINA_HOME也可以引用它。例如

<systemProperties>
    <property>
        <name>PATH_TO_CATALINA_HOME</name>
        <value>${my.dev.catalina.home}</value>
    </property>
</systemProperties>

这将帮助我们定义${my.dev.catalina.home}不同的值。

我希望这可能会有所帮助。

于 2013-04-05T01:35:34.487 回答
2

为了使 log4j 属性文件在从 maven 运行测试时获得 ${catalina.home} 的正确值,它需要位于由 maven 过滤的文件中(src/main/resources 是这样的文件的目录)。此外,变量 'catalina.home' 需要在 maven 中设置。您可以创建一个使用环境变量的变量 AKA maven 属性,以便您可以为每台机器上的 tomcat 安装定义不同的位置:

<properties>
  <catalina.home>${env.catalina.home}</catalina.home>
<properties> 
于 2013-04-04T23:09:01.513 回答
0

您还可以指定与您的用户帐户的主目录相关的日志文件的位置。

在 log4j 中,这将使用以下格式:${user.home}/weblogs/log4j1.log

在 log4j 2 中,这将使用以下格式:${sys:user.home}/weblogs/log4j2Rolling.log

log4j 2 可以使用 Java 系统属性、环境变量或 Maven 属性

于 2016-05-22T04:08:58.947 回答