2010-04-08 11 views
37

Ho cercato di impostare un progetto di logback semplice per eseguire il roll dei file di registro per data e file, e fino ad ora non sono riuscito a far scorrere il mio appender su un altro file . Scrive invece nel registro specificato dal tag </>.Registro di rolling log su file e tempo

Ecco il mio logback.xml file di configurazione:

<?xml version="1.0"?> 
<configuration scan="true" scanPeriod="10 seconds"> 
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
    </appender> 

    <appender name="milliroller" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>log/output.log</file> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>log/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>1KB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 
    </appender> 

    <root level="DEBUG"> 
     <appender-ref ref="stdout"/> 
     <appender-ref ref="milliroller"/> 
    </root> 

    <logger name="com.tkassembled.logback" level="DEBUG"/> 
</configuration> 

A prima vista, sembra che dovrebbe funzionare, giusto? C'è qualcosa che sto sbagliando? Il mio intero progetto costruibile è disponibile in un file zip qui: http://www.mediafire.com/file/2bxokkdyz2i/logback.zip

risposta

87

Anche se questa è una vecchia domanda, ho sentito che una risposta operativa è appropriata per aiutare chiunque richieda questo tipo di implementazione.

Io uso la seguente configurazione di logback per fornire un log HTML, aggiornato per data e file, nonché per il logging su console per l'output di debug.

Logfiles sono memorizzati in una directory logs con un nome di logFile.html mentre la sua attiva e logFile.2013-mm-dd.i.html quando rotola sopra, dove i è il numero di file di log 50MB. Ad esempio logFile.2013-01-07.0.html.

<configuration> 

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

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logs\logFile.html</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern> 
     <timeBasedFileNamingAndTriggeringPolicy 
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <!-- or whenever the file size reaches 50MB --> 
     <maxFileSize>50MB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
     <!-- keep 30 days' worth of history --> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
     <charset>UTF-8</charset> 
     <layout class="ch.qos.logback.classic.html.HTMLLayout"> 
     <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern> 
     </layout>   
    </encoder> 
    </appender> 

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

</configuration> 
+0

Grazie! La registrazione in html è ottima per leggibilità. –

+0

Vedere [risposta di AndreLDM] (https://stackoverflow.com/a/36707798/384674), questa configurazione registra 'SizeAndTimeBasedFNATP è deprecato. Con l'opzione' debug = true' in 'logback.xml' – Betlista

+0

Secondo il mio test' maxHistory' non è il numero di giorni, ma il numero di file, quindi se hai più file al giorno, avrai meno giorni ... – Betlista

-4

Dovresti essere in grado di configurare il tuo registro utilizzando un FileHandler.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/FileHandler.html#FileHandler(java.lang.String, int, int)

Questo richiede un limite di dimensione del file e ruota il registro quando colpisce quel limite.

+0

Questo è utile ma in realtà sto cercando una soluzione all'interno di Logback. Il logback è una grande libreria e mi piacerebbe usarlo, a patto ovviamente che riesca a farlo funzionare. –

34

Dal logback 1.1.7 (versione di marzo 2016) un nuovo appender chiamata SizeAndTimeBasedRollingPolicy è disponibile che semplifica drasticamente ciò che devi fare:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>app.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
     <fileNamePattern>app-%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
     <maxFileSize>10MB</maxFileSize>  
     <maxHistory>30</maxHistory> 
     <totalSizeCap>1GB</totalSizeCap> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%msg%n</pattern> 
    </encoder> 
</appender> 

Vedi here per ulteriori informazioni.

+0

Secondo il mio test 'maxHistory' non è il numero di giorni, ma il numero di file, quindi se avete più file al giorno, avrete meno giorni ... – Betlista

+0

A meno che non sia un bug, la [documentazione] (https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy) è chiaro che 'maxHistory' è il numero di giorni (si noti il ​​commento xml). – AndreLDM

+0

Non proprio, [documentazione] (https://logback.qos.ch/manual/appenders.html#tbrpMaxHistory) legge "La proprietà maxHistory opzionale controlla il numero massimo di file di archivio da conservare ...", il loro esempio di mensile il rollover è un po 'confuso e il commento in XML è davvero sbagliato. Li manderò via e-mail e ti farò sapere. – Betlista

Problemi correlati