【问题标题】:CATALINA_HOME and Maven + LOG4JCATALINA_HOME 和 Maven + LOG4J
【发布时间】:2016-05-22 12:08:58
【问题描述】:

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

【问题讨论】:

    标签: maven log4j


    【解决方案1】:

    请尝试使用the Maven Profile,当${env.catalina.home}不存在时将激活,与Maven Surefire Plugin:Using System 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 也可以由the Maven Properties 引用。例如

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

    这将帮助我们将${my.dev.catalina.home} 定义为各种值。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      <properties>
        <catalina.home>${env.catalina.home}</catalina.home>
      <properties> 
      

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2012-02-28
          • 1970-01-01
          • 2015-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-01
          • 2012-01-31
          • 1970-01-01
          相关资源
          最近更新 更多