我使用SL4j和Logback作爲託管在Tomcat中的Web應用程序。我使用Spring和Maven(沒有配置文件)。用於集成測試的不同日誌文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
<configuration>...</configuration>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
裏面的logback的配置我有一個基於文件的appender:巧合被分隔爲集成測試和web應用程序
<appender name="A2" class="ch.qos.logback.core.FileAppender">
<file>myapp.log</file>
...
日誌文件:集成測試與神火插件做了集成測試是我的項目的根源,對於webapp,它是Eclipse目錄。所以,我公司推出的的logback配置裏面的日誌文件的位置:在組合
<insertFromJNDI env-entry-name="java:comp/bla/logDir" as="logDir" />
<if condition='!isDefined("logDir")'>
<then>
<property name="logDir" value="${catalina.home}/logs/" />
</then>
</if>
的if
與isDefined
作品現在,我忘了JANINO在classpath(感謝Ceki)。集成測試日誌輸出和Web應用程序日誌輸出在同一個日誌文件中。所以我的問題:
我怎樣才能分離集成測試Web應用程序的日誌文件? 我發現這個link,但我更喜歡只有配置的解決方案。我真的很想插入Maven屬性。
更新 我的問題解決了。首先的logback配置:
<configuration scan="true" debug="true">
<!-- used for the production webapp -->
<insertFromJNDI env-entry-name="java:comp/bla/logDir" as="logDir" />
<if condition='!isDefined("logDir")'>
<then>
<if condition='isDefined("catalina.home")'>
<then>
<!-- used for the development webapp -->
<property name="logDir" value="${catalina.home}/logs/" />
</then>
<else>
<!-- used for the integration test -->
<property name="logDir" value="./" />
</else>
</if>
</then>
</if>
的附加器文件屬性的樣子:
<file>${logDir}/myapp.log</file>
2東西都在這個解決方案奇怪:
- 的logback認爲物業是不確定的,當它是空。所以我不得不使用
"./"
而不是""
(空字符串)。 isDefined("catalina.home")
結果true
僅當在Tomcat中啓動時(OS是Windows)。不知道爲什麼要定義「catalina.home」,我有一個名爲「CATALINA_HOME」的環境變量,但它接近TomCat在開始時設置「catalina.home」。
我仍然想插入一個Maven var到logback配置文件(項目根目錄),但是恐怕我必須忍受上面的解決方案。
感謝您的更新。 – electrotype