2013-04-04 40 views
2

我此行的log4j:CATALINA_HOME和Maven + LOG4J

log4j.appender.FILE.File = $ {}的catalina.home /logs/debug.log

完美的作品,當我運行來自IntelliJ的項目。

但是當我嘗試運行TestNG的測試(從行家)失敗:

的log4j:ERROR setFile(NULL,TRUE)調用失敗。 java.io.FileNotFoundException:/logs/debug.log(沒有這樣的文件或目錄)

我可以硬編碼的路徑,一切都會很好。但是我不想要這個解決方案,因爲我可以在$ {catalina.home}不同的地方部署各種系統。

我在mac上開發並部署在freebsd和centos上。 Tomcat總是在不同的地方。我可以使用/var/log/myapp.log但是...

是否有任何方法來定義一個公共變量(在IntelliJ中可用,當我運行maven測試)與日誌文件路徑?

回答

2

請儘量使用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}定義爲各種值。

我希望這可能有所幫助。

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

您還可以指定與您的用戶帳戶的主目錄相關的日誌文件的位置。

在log4j的,這將使用以下格式:$ {}的user.home /weblogs/log4j1.log

在log4j的2,這將使用以下格式:$ {SYS:的user.home} /博客現在都好:/log4j2Rolling.log

log4j的2可以使用Java系統屬性,環境變量,或Maven性質