2016-05-12 8 views
0

Ich arbeite an einer Spring-MVC-Anwendung, in der ich versuche, Logging wieder funktioniert zu bekommen. Leider hat es irgendwann nicht mehr funktioniert, ich weiß nicht, was das verursacht. Ich habe einige Vorschläge im Netz versucht, aber nichts nützliches. Irgendwelche Vorschläge?Spring: Logging funktioniert nicht mit Log4j oder Logback

pom.xml:

<packaging>war</packaging> 
    <properties> 
     <java-version>1.8</java-version> 
     <org.springframework-version>4.1.6.RELEASE</org.springframework-version> 
     <org.aspectj-version>1.7.4</org.aspectj-version> 
     <org.slf4j-version>1.7.5</org.slf4j-version> 
     <hibernate.version>4.3.9.Final</hibernate.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <springsecurity.version>4.0.1.RELEASE</springsecurity.version> 
     <spring-platform.version>1.1.3.RELEASE</spring-platform.version> 
     <jetty.version>9.2.9.v20150224</jetty.version> 
    </properties> 

    <parent> 
     <groupId>io.spring.platform</groupId> 
     <artifactId>platform-bom</artifactId> 
     <version>1.1.3.RELEASE</version> 
     <relativePath /> 
    </parent> 

    <dependencies> 

    <!-- Spring framework dependencies --> 

     <dependency> 
      <groupId>org.springframework.mobile</groupId> 
      <artifactId>spring-mobile-device</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-redis</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
     </dependency> 

     <!-- Spring security dependencies --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-taglibs</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
     </dependency> 


    <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.5</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>1.7.5</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.0.13</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-core</artifactId> 
      <version>1.0.13</version> 
      <scope>runtime</scope> 
     </dependency> 

     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>apache-log4j-extras</artifactId> 
      <version>1.1</version> 
     </dependency> 

Ich habe beide log4j.xml und logback.xml:

log4j.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> 
<log4j:configuration> 


    <!-- Appenders --> 
    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Target" value="System.out" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p: %c - %m%n" /> 
     </layout> 
    </appender> 
    <logger name="org.cometd"> 
     <level value="debug"/> 
    </logger> 
    <!-- Root Logger --> 
    <root> 
     <priority value="OFF" /> 
     <appender-ref ref="console" /> 
    </root> 

</log4j:configuration> 

logback.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <include resource="org/springframework/boot/logging/logback/base.xml"/> 


    <logger name="org.cometd" level="debug"/> 
    <logger name="com.tooltank.spring.chat.ChatServiceImpl" level="info"/> 
</configuration> 

Beim Serverstart bekomme ich Folgendes:

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home//WEB-INF/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
13:43:29,173 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 
13:43:29,173 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 
13:43:29,174 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/path/to/logback.xml] 
13:43:29,292 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 
13:43:29,298 |-ERROR in ch.qos.logback.core.joran.action.IncludeAction - Could not find resource corresponding to [org/springframework/boot/logging/logback/base.xml] 
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 
13:43:29,299 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.cometd] to DEBUG 
13:43:29,299 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.tooltank.spring.chat.ChatServiceImpl] to INFO 
13:43:29,299 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 
13:43:29,300 |-INFO in [email protected] - Registering current configuration as safe fallback point 

Was fehlt mir? Vielen Dank.

Antwort

1

Sie sollten log4j und logback in einer Anwendung vermeiden. Wenn Sie beiden Gläser in Ihrem Classpath haben die Classloader entweder einer von ihnen (eine Art Zufall ..) wählen , die durch diese Log-Anweisung angegeben:

SLF4J: Class path contains multiple SLF4J bindings. 

Wenn Sie beabsichtigen, verwenden logback Sie vergebe müssen logback.xml-Datei im Klassenpfad Ihrer Anwendung. Aus der Dokumentation:

logback versucht, sich mit den Dateien logback-test.xml oder logback.xml zu konfigurieren, wenn diese im Klassenpfad gefunden werden.

Sie können auch auf diesen Link finden Sie unter: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-logback-for-logging

Edit: Ich denke, Sie müssen auch eine appender zur Konsole hinzufügen, wie:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
<!-- encoders are assigned the type 
    ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
<encoder> 
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
</encoder> 

und dann Fügen Sie den Appender zu Ihrem Logger hinzu:

<logger name="org.cometd" additivity="false"> 
    <level value="DEBUG" /> 
    <appender-ref ref="STDOUT" /> 
</logger> 

Mit freundlichen Grüßen!

+0

Mit Blick auf die aktuelle Situation, was würden Sie empfehlen, Log4j oder Logback zu entfernen, was einfacher zu verwalten ist und ich kann Protokolle aus Bibliotheken mit Debuggen und so erhalten. –

+0

Mein persönlicher Favorit wäre es, Logback zu behalten, aber es hängt davon ab, was Sie brauchen. Schau dir den Link an, den ich in meiner Antwort hinzugefügt habe. Ich denke, das könnte Ihnen helfen – Joschi

+0

Hallo, ich habe alle Abhängigkeiten für log4j und slf4j entfernt, und nur logback-classic und logback-core von ch.qos.logback gehalten. Die Konfiguration des XML ist identisch mit dem, was ich in dem Link angegeben habe. Auch danach kann ich keine Debug-Meldungen, irgendwelche Ideen sehen. Startprotokoll: http://pastebin.com/pSdmY77U –