2016-07-15 13 views
1

Wenn ich hinzufügen Logback und SLF4J meiner Spring MVC (Version 4.1.0) Projekt von Maven Abhängigkeiten wie folgt ergänzt:Spring + Logback (slf4j) Protokollierung ohne JCL-over-slf4j

  <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>jcl-over-slf4j</artifactId> 
       <version>1.7.21</version> 
       <scope>runtime</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
       <version>1.7.21</version> 
       <scope>compile</scope> 
      </dependency> 
      <dependency> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-classic</artifactId> 
       <version>1.1.7</version> 
       <scope>runtime</scope> 
      </dependency> 

und verstehen sich inklusive commons -Protokollierung Abhängigkeit, erhalte ich dann in Protokolldatei, zusätzlich zu den Anwendungsprotokollen, einige Frühjahr Ereignisse INFO Ebene wie:

[RMI TCP Connection(4)-127.0.0.1][org.springframework.web.context.ContextLoader] - Root WebApplicationContext: initialization started 

Wenn ich Abhängigkeiten ohne JCL-over-slf4j hinzuzufügen und ohne commons-logging in pom ohne .xml, dann bekomme ich nur Anwendungsprotokolle.

Das ist mein logback.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <property name="LOG_HOME" value="logs" /> 
    <property name="APP_NAME" value="App" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
     <encoder> 
      <charset>UTF-8</charset> 
      <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>    
     </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <FileNamePattern>${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
      <MaxHistory>30</MaxHistory> 
     </rollingPolicy> 

     <encoder> 
      <charset>UTF-8</charset> 
      <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>     
     </encoder> 

     <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
      <MaxFileSize>10MB</MaxFileSize> 
     </triggeringPolicy> 
    </appender> 

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

    <logger name="org.springframework" level="INFO" appender-ref="FILE"/> 
</configuration> 

wie ich es verstehe, dies geschieht, weil, wenn ich nicht den JCL-Brücke verwenden logback nicht innere Protokolle JCL Frühling fangen oder übersetzen. Bitte korrigiere mich, wenn ich falsch liege.

Kann ich logback.xml konfigurieren, um Standart-Spring-Log-Ereignisse ohne JCL-Bridge zu erhalten?

Antwort

1

Überprüfen Sie ihre docs, denn es gibt viele Informationen mit Beispielen. Aber Sie in Frage: Frühling und JCL:

Die obligatorische Protokollierung Abhängigkeit im Frühling ist die Jakarta Commons Logging API (JCL). Wir kompilieren gegen JCL und machen JCL Log Objekte für Klassen sichtbar, die das Spring Framework erweitern. Es ist wichtig für Benutzer, dass alle Versionen von Spring die gleiche Protokollierung verwenden Bibliothek: Migration ist einfach, weil die Abwärtskompatibilität ist erhalten auch mit Anwendungen, die Spring verlängern.Die Art, wie wir dies tun ist eines der Module im Frühjahr explizit abhängen auf Commons-Logging (die kanonische Implementierung von JCL), und dann make alle anderen Module hängen davon ab, bei der Kompilierung. Wenn Sie zum Beispiel Maven verwenden und sich wundern, wo Sie die Abhängigkeit von commons-logging gefunden haben, dann ist es von Spring und speziell vom Zentralmodul namensspring-core.

Und über logback Konfiguration ist hier guter Punkt:

Eine gemeinsame Wahl unter SLF4J Benutzer, die weniger Abhängigkeiten weniger Schritt Sand erzeugt verwendet, ist direkt an Logback zu binden. Dieser entfernt den zusätzlichen Bindeschritt, weil Logback SLF4J direkt implementiert, so dass Sie nur auf zwei Bibliotheken nicht vier (jcl-über-slf4j und logback) abhängen müssen. Wenn Sie dies tun, müssen Sie möglicherweise auch die slf4j-API-Abhängigkeit von anderen externen Abhängigkeiten ausschließen (nicht Spring), weil Sie nur eine Version dieser API auf dem Klassenpfad wollen.

Verwandte Themen