2013-04-04 2 views
2

У меня есть эта линия в log4j:CATALINA_HOME и Maven + LOG4J

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

отлично работает, когда я бегу проект от IntelliJ.

Но когда я пытаюсь запустить тест TestNG (от мавена) он не:

log4j: ОШИБКА SetFile (нуль, правда) Сбой вызова. 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 получил правильное значение для $ {catalina.home} при выполнении тестов из maven, он должен находиться в файле, который фильтруется maven (src/main/resources - это каталог для таких файлов). Кроме того, переменная «catalina.home» должна быть настроена в maven. Вы можете создать переменную АКУ Maven свойство, которое использует переменное окружение, так что вы можете определить другое место для кота установки на каждую машине:

<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

Смежные вопросы