2011-11-10 11 views
8

Chcę użyć logback logowania z maven-jetty-plugin. Najwyraźniej właściwość systemowa logback.configurationFile jest odczytywana po uruchomieniu maven-jetty-plugin i zainicjowała slf4j, więc plik ./src/test/resources/logback.xml nie jest czytany przez pomost. W rezultacie otrzymuję wszystkie komunikaty dziennika ustawione na poziom debugowania i drukowane na konsoli (domyślna konfiguracja logback). Uruchomienie maven za pomocą -Dlogback.configurationFile = ... rozwiązuje problem. Jednak wolałbym ustawić właściwość w pom, jak to jest możliwe z log4j i maven-jetty-plugin. Jakieś pomysły ?Rejestrowanie logback z maven-jetty-plugin

Oto moja pom.xml:

... 
<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-maven-plugin</artifactId> 
    <version>8.0.4.v20111024</version> 
    <dependencies> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.0.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     </dependencies> 
     <configuration> 
      <systemProperties> 
      <systemProperty> 
       <name>logback.configurationFile</name> 
       <value>./src/test/resources/logback.xml</value> 
      </systemProperty> 
      </systemProperties> 
... 

A oto logback.xml:

<configuration> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logFile.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
    </rollingPolicy> 

    <encoder> 
     <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 

    </appender> 

    <root level="INFO"> 
    <appender-ref ref="FILE" /> 
    </root> 

</configuration> 

Odpowiedz

3

Korzystanie starszy maven-jetty-plugin zamiast jetty-maven-plugin utworów dla mnie:

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <version>6.1.26</version> 
    <configuration> 
    <systemProperties> 
     <systemProperty> 
     <name>logback.configurationFile</name> 
     <value>${project.build.outputDirectory}/jetty-logback.xml</value> 
     </systemProperty> 
    </systemProperties> 
    </configuration> 
    <dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.4</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.0.0</version> 
    </dependency> 
    </dependencies> 
</plugin> 
+0

Ładna i czysta odpowiedź. Dla porównania robię coś podobnego za pomocą Gradle'a: http://thegreenoak.blogspot.com/2013/02/using-slf4j-and-logback-with-gradle.html – djangofan

2

Znam ten sam problem. Jako obejście użyłem slf4j-simple zamiast logback. Slf4j-simple ma domyślną konfigurację ustawioną na poziom INFO, ale w innych przypadkach nie jest konfigurowalny, więc może lub nie może spełnić twoich potrzeb. W konfiguracji wtyczki, wymienić logback-classic z:

 <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.6.4</version> 
     </dependency> 
6

Współpracuje z Jetty 9 i molo-maven-plugin:

<plugin> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-maven-plugin</artifactId> 
    <version>${jetty.version}</version> 
    <dependencies> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>${logback.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-access</artifactId> 
     <version>${logback.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    </dependencies> 
    <configuration> 
    <scanIntervalSeconds>10</scanIntervalSeconds> 
    <webAppSourceDirectory>src/main/resources/htdocs</webAppSourceDirectory> 
    <webApp> 
     <descriptor>src/main/webapp/WEB-INF/web.xml</descriptor> 
    </webApp> 
    <systemProperties> 
     <systemProperty> 
     <name>org.eclipse.jetty.util.log.Log</name> 
     <value>org.eclipse.jetty.util.log.Slf4jLog</value> 
     </systemProperty> 
     <systemProperty> 
     <name>logback.configurationFile</name> 
     <value>src/main/resources/logback.xml</value> 
     </systemProperty> 
    </systemProperties> 
    </configuration> 
</plugin> 
3

można wykorzystać właściwości-maven-plugin:

<project> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>properties-maven-plugin</artifactId> 
     <version>1.0-alpha-2</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>set-system-properties</goal> 
      </goals> 
      <configuration> 
       <properties> 
       <property> 
        <name>logback.configurationFile</name> 
        <value>src/test/resources/logback.xml</value> 
       </property> 
       </properties> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Dokumentacja: http://mojo.codehaus.org/properties-maven-plugin/usage.html To nie jest doskonałe, ale powinno działać.