2016-04-22 44 views
14

Quando interrompo l'esecuzione dell'applicazione spring-boot, ci sono due file di registro prodotti anziché uno (uno è previsto).La configurazione di Logback-test.xml produce due file di registro invece di uno?

Cosa c'è di sbagliato nel mio file Logback-test.xml che potrebbe causare questo?

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> 

I due file sono stati creati ad es .:

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

and 

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

il nome del file è lo stesso? – nyname00

+0

vedi edit grazie – java123999

+0

puoi provare a sostituire il rolling file appender con un normale 'FileAppender' – nyname00

risposta

7

Il timestamp viene generato quando la configurazione viene analizzata. Poiché Spring Boot reinizializza la registrazione una volta all'avvio, vengono generati due timestamp diversi e quindi i due file.

È possibile utilizzare un timeReferene="contextBirth" nella configurazione per ottenere un timestamp costante. Dal momento che lo LoggerContext non è stato distrutto, solo il reset dovrebbe funzionare:

<timestamp key="myTimestamp" timeReference="contextBirth" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/> 
+0

Grazie per la risposta, non sto seguendo davvero quello che dici la soluzione? – java123999

+0

Ho aggiornato la mia risposta. – joshiste

2

Come funziona il vostro sguardo logging.config immobile? Il problema potrebbe essere il pathing (o la proprietà mancante dal file delle proprietà). Per esempio. dovrebbe assomigliare a questo:

logging.config=classpath:logback-test.xml 

in application-test.properties.

L'altra possibilità potrebbe essere che si hanno due profili attivi. Per esempio. il tuo profilo test e lo default. In tal caso, è possibile aggirare il problema con la configurazione condizionale nel logback.

Vedere answer per ulteriori dettagli. Inoltre, vedi l'ultimo commento su quella risposta. Stivale Primavera 1.3 include alcune nuove funzionalità di tutto la gestione di più profili con logback:

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

+0

Attualmente non ho questa proprietà logging.config? Ne ho bisogno? – java123999

+0

se si imposta la configurazione di registrazione specifica del profilo, quindi penso di sì, sì.Ma il suo possibile avvio può capirlo da solo, non sicuro al 100%. Tuttavia non posso fare a meno di essere esplicito. – leeor

0

Il problema è probabilmente legata a questa linea:

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

This version dei file inclusi è anche verso gli altri e una di them have a file appender. Poiché si stanno definendo i propri appendici (file e console), probabilmente non è necessario includere il file di base Spring Boot.

+0

No, l'ho commentato, ma ho ottenuto 2 file di registro? – java123999

+0

Hum, ho visto che stai usando millisecondi per definire il nome del file. Forse potrebbe essere un bug durante l'inizializzazione di logback. Cosa succede se si modifica il modello per non utilizzare i millisecondi? – marcospereira

+0

Inoltre, quale versione di logback stai usando? – marcospereira

0

Funziona?

<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

No Ricevo l'errore: Causato da: java.lang.IllegalStateException: nessuna azione applicabile per [triggerPolicy], ElementPath corrente è [[configurazione] [appender] [triggeringPolicy]] – java123999

+0

Siamo spiacenti, alla fine c'è un doppio extra della prima riga. Sperando di averlo rimosso e provato. – soufrk

+0

Sì, l'ho rimosso ma ho ancora ricevuto quell'errore – java123999