2016-05-25 10 views
1

Ich verwende derzeit SLF4J API für die Protokollierung.Spring - Ausnahmen protokollieren nicht in einer Datei

Wenn während der Laufzeit eine Ausnahme ausgelöst wird, wird die vollständige Fehlerprotokollierung nicht in die Datei protokolliert. Sie wird nur auf der Konsole ausgegeben. Ich benutze Eclipse.

Hier ist mein Code für logback.xml (derzeit in Klassen befindet Ordner unter WEB-INF)

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

<configuration> 
    <!-- Specify here the path of the folder you want to save your logs --> 
    <property name="LOGFILE_PATH" value="C:/Logs" /> 

    <!-- All logging will be redirected/ printed to console. --> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <Pattern>%d{yyyy-MM-dd hh:mm:ss a} [%thread] %-5level %logger{50} - %rEx %msg%n </Pattern> 
     </layout> 
    </appender> 

    <!-- Send log to file --> 
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <File>${LOGFILE_PATH}/spring-mybatis-log.log</File> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{yyyy-MM-dd hh:mm:ss a} [%thread] %-5level %logger - %rEx %msg%n</pattern> 
     </layout> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${LOGFILE_PATH}/spring-mybatis-log-%d{yyyy-MM-dd}-%i.txt 
      </fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy 
       class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>2MB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 
    </appender> 

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

</configuration> 
  1. Gibt es etwas fehlt/falsch mit der oben angegebenen Datei ??

  2. Ist es möglich, den gesamten Text, der auf der Konsole ausgegeben wird, in einer Datei zu protokollieren?

  3. Wie liest spring (oder das Projekt selbst) die Datei logback.xml? Was passiert, wenn ich es umbenenne und in einen anderen Ordner lege?

  4. Wie man Wurzel erstellen alle Ebenen enthalten (INFO, DEBUG, Fehler, Warnung, etc ..)?

Antwort

1

Ihre Fragen zu beantworten:

  1. mir nichts in der Datei y offensichtlich falsch aussieht Du hast gepostet, obwohl ich nicht versucht habe, es zu starten.
  2. Genau so, wie Sie es gemacht haben, ist es in Ordnung, mit zwei Appendern, einer der zur Datei geht und der andere zur Konsole.
  3. Logback sucht standardmäßig im Klassenpfad nach der Datei logback.xml. Einzelheiten finden Sie unter configuration page of the manual. Wie es dort ankommt, hängt von Ihrem Build-System ab. Wenn ich Maven verwende, würde ich vorschlagen, es in src/main/resources zu setzen. Aber wenn es in Ihrer Webanwendung in WEB-INF/classes endet, sollte das funktionieren. Unabhängig davon, was Sie in Ihre logback.xml-Datei schreiben, erhalten Sie nur eine Konsolenausgabe (versuchen Sie, einen Syntaxfehler hinzuzufügen oder die zu testende Datei umzubenennen), das würde ich mir zuerst ansehen, um sicherzustellen, dass Logback die Datei aufnimmt Recht. Es wird standardmäßig alles nur auf der Konsole zeigen, wenn es die Datei nicht finden kann, obwohl ich denke, dass es am Anfang eine Warnung anzeigt, dass es so ist. Wenn die Datei abgerufen wird, können Sie versuchen, debug="true" in das Element <configuration> zu setzen, um zu sehen, ob ein Fehler auftritt, der dazu führt, dass der Appender nicht wie erwartet verwendet wird.
  4. Die Angabe der "DEBUG" Ebene der Protokollierung, wie Sie es getan haben, wird auch alle höheren Ebenen erhalten.

Wenn das Problem ist, dass von Spring Anmeldung nicht geht, wo Sie wollen, während Ihre Anwendung Protokollierung fein arbeitet, können Sie Frühling umleiten müssen (die Apache Commons Logging verwendet) SLF4J stattdessen zu verwenden. Entfernen Sie dazu die Common-Logging-Abhängigkeit und fügen Sie die Bibliothek jcl-over-slf4j hinzu.Dies emuliert die Commons-Logging-Aufrufe und zeigt stattdessen auf SLF4J. Weitere Informationen finden Sie im Abschnitt "Verwenden von SLF4J" unter this blog post.

0

Ihre Konfiguration sieht nicht gut aus, aber Sie können Ihre Root-Ebene verwenden INFO statt DEBUG versuchen und wenn Sie Frameworks wie Frühling haben, Hibernate usw. Logback können Sie einen anderen Ebenen nutzt sie so etwas wie:

<logger name="org.hibernate" level="OFF" /> 
<logger name="org.springframework" level="INFO" /> 
<logger name="org.springframework.web.servlet.mvc" level="INFO" />