2016-04-22 4 views
14

Wenn ich aufhören zu laufen meine spring-boot Anwendung gibt es zwei Protokolldateien statt eine erzeugt (man wird erwartet).Logback-test.xml-Konfiguration erstellt zwei Protokolldateien anstelle von einem?

Was ist falsch in meiner Logback-test.xml Datei unten, die dies verursachen kann?

logback-test.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <timestamp key="myTimestamp" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/> 

    <include resource="org/springframework/boot/logging/logback/base.xml"/> 

    <logger name="org.springframework.web" level="INFO"/> 

    <!-- Send debug messages to System.out --> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <!-- By default, encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 

     <file>C:\path\to\my\file\myLog-${myTimestamp}.log</file> 
     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
      <Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} - %msg%n</Pattern> 
     </encoder> 

     <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
      <FileNamePattern>myLog.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern> 
      <MinIndex>1</MinIndex> 
      <MaxIndex>10</MaxIndex> 
     </rollingPolicy> 

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

    </appender> 

    <logger name="com.my.package" level="INFO" additivity="false"> 
     <appender-ref ref="STDOUT" /> 
     <appender-ref ref="FILE" /> 
    </logger> 

    <!-- By default, the level of the root level is set to DEBUG --> 
    <root level="INFO"> 
     <appender-ref ref="STDOUT" /> 
    </root> 

</configuration> 

Die beiden Dateien erstellt werden, sind z.B .:

myLog-2016-04-22_15-47-30.126.log 

and 

myLog-2016-04-22_15-47-30.922.log 
+0

ist der Dateiname Muster das gleiche? – nyname00

+0

siehe bitte edit – java123999

+0

können Sie versuchen, den rollenden Datei Appender mit einem normalen 'FileAppender' zu ersetzen – nyname00

Antwort

7

Der Zeitstempel erzeugt, wenn die Konfiguration analysiert wird. Da Spring Boot das Logback einmalig beim Start neu initialisiert, werden zwei verschiedene Zeitstempel generiert und somit die beiden Dateien.

Sie können einen timeReferene="contextBirth" in Ihrer Konfiguration verwenden, um einen konstanten Zeitstempel zu erhalten. Da die LoggerContext nicht zerstört wird, nur zurückgesetzt, sollte dies funktionieren:

+0

Vielen Dank für die Antwort, ich bin nicht wirklich folgen, was Sie die Lösung sagen? – java123999

+0

Ich habe meine Antwort aktualisiert. – joshiste

2

Wie funktioniert Ihr logging.config Eigenschaft aussehen? Ihr Problem könnte die pathing sein (oder die Eigenschaft fehlt in Ihrer Eigenschaftendatei). Z.B. in etwa so aussehen sollte:

logging.config=classpath:logback-test.xml 

in application-test.properties.

Die andere Möglichkeit könnte sein, dass Sie zwei aktive Profile haben. Z.B. Ihr test Profil und die default eins. In diesem Fall können Sie mit der bedingten Konfiguration im Logback umgehen.

Weitere Informationen finden Sie unter answer. Siehe auch den letzten Kommentar zu dieser Antwort. 1.3 Federverschluß enthält einige neue Features um mehrere Profile mit logback Handhabung:

<include resource="org/springframework/boot/logging/logback/base.xml"/> 

This version der enthaltenen Dateien einschließlich zu den anderen und ein:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-logback-extensions

+0

Ich habe derzeit diese Eigenschaft logging.config nicht? Brauche ich es? – java123999

+0

Wenn Sie profilspezifische Logging Config einstellen, dann denke ich ja.Aber seine mögliche Boot kann das herausfinden, aber nicht 100% sicher. Trotzdem kann es nicht schaden, explizit zu sein. – leeor

0

Das Problem wahrscheinlich auf dieser Linie verwandt von them have a file appender. Da Sie eigene Appender (Datei und Konsole) definieren, müssen Sie die Spring Boot-Basisdatei wahrscheinlich nicht einschließen.

+0

Nein, ich habe das kommentiert, aber trotzdem 2 Log-Dateien bekommen? – java123999

+0

Ich habe gesehen, dass Sie Millisekunden verwenden, um den Dateinamen zu definieren. Vielleicht könnte es ein Fehler bei der Logbuch-Initialisierung sein. Was passiert, wenn Sie das Muster so ändern, dass keine Millisekunden verwendet werden? – marcospereira

+0

Welche Version von Logback verwenden Sie auch? – marcospereira

0

Funktioniert das?

<appender name="FILE" class="ch.qos.logback.core.FileAppender""> 

    <file>C:\path\to\my\file\myLog-${myTimestamp}.log</file> 
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
     <Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} - %msg%n</Pattern> 
    </encoder> 

<!-- 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <FileNamePattern>myLog.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern> 
     <MinIndex>1</MinIndex> 
     <MaxIndex>10</MaxIndex> 
    </rollingPolicy> 
--> 
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <MaxFileSize>50MB</MaxFileSize> 
    </triggeringPolicy> 

</appender> 
+0

Nein Ich erhalte den Fehler: Verursacht durch: java.lang.IllegalStateException - keine anwendbare Aktion für [triggeringPolicy], derzeitiges ElementPath ist [[configuration] [appender] [triggeringPolicy]] – java123999

+0

Entschuldigung, am Ende gibt es ein zusätzliches Doppelzitat der ersten Zeile. Hoffentlich hast du es entfernt und es versucht. – soufrk

+0

Ja, ich habe es entfernt, aber immer noch diesen Fehler – java123999

Verwandte Themen