2010-04-08 16 views
37

He estado intentando configurar un proyecto de logback simple para mover mis archivos de registro por fecha y por tamaño de archivo, y hasta ahora no he podido hacer que mi appender se transfiera a otro archivo . En su lugar, escribe en el registro especificado por la etiqueta del archivo </>.Rolling Log Loggs en filesize y time

Aquí es mi logback.xml fichero de configuración:

<?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 primera vista, parece que debería funcionar, ¿verdad? ¿Hay algo que estoy haciendo mal? Todo mi proyecto edificable está disponible en un zip aquí: http://www.mediafire.com/file/2bxokkdyz2i/logback.zip

Respuesta

87

Aunque esta es una vieja pregunta, sentí que una respuesta de trabajo es apropiada para ayudar a cualquiera que requiera este tipo de implementación.

Utilizo la siguiente configuración de inicio de sesión para proporcionar un registro HTML, transferido por fecha y tamaño de archivo, así como el inicio de sesión para la depuración de la consola.

Logfiles se almacenan en un directorio logs con un nombre de logFile.html mientras que su activo, y logFile.2013-mm-dd.i.html cuando se da la vuelta, donde i es el número de archivos de registro de 50MB. Por ejemplo, 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

¡Gracias! Iniciar sesión en html es excelente según la legibilidad. –

+0

Ver [respuesta de AndreLDM] (https://stackoverflow.com/a/36707798/384674), esta configuración registra 'SizeAndTimeBasedFNATP está en desuso 'con la opción' debug = true' en 'logback.xml' – Betlista

+0

Según mi prueba' maxHistory' no es el número de días, sino el número de archivos, por lo que si tiene más archivos por día, tendrá menos días ... – Betlista

34

Desde logback 1.1.7 (lanzado en marzo de 2016) una nueva llamada appender SizeAndTimeBasedRollingPolicy está disponible que simplifica drásticamente lo que tiene que hacer:

<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> 

Ver here para más información.

+0

De acuerdo con mi prueba 'maxHistory' no es el número de días, sino el número de archivos, por lo que si tiene más archivos por día, tendrá menos días ... – Betlista

+0

A menos que sea un error, la [documentación] (https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy) es claro acerca de que 'maxHistory' es el número de días (observe el comentario xml). – AndreLDM

+0

No realmente, [documentación] (https://logback.qos.ch/manual/appenders.html#tbrpMaxHistory) dice "La propiedad opcional maxHistory controla la cantidad máxima de archivos de almacenamiento para mantener ...", su ejemplo de mensualmente rollover es un poco confuso y comentar en XML es realmente incorrecto. Les dejaré un correo electrónico y les avisaré. – Betlista