2012-12-18 25 views
8

Io uso RollingFileAppender di log4j 1.2.16, che registra i file di registro quando raggiungono una determinata dimensione. Ora vorrei caricare i file di registro tutti i giorni e quando raggiungono una determinata dimensione. Quindi ci saranno uno o più file di log al giorno.Registri di rotolamento per dimensioni e tempo

Per esempio,

myapp.log 
myapp-17.12.2013.log 
myapp-16.12.2012.log 
myapp-16.12.2012.1.log 
myapp-16.12.2012.2.log 

C'è un off-the-shelf appender, che lo fa già?

+0

http://stackoverflow.com/questions/3823977/need-a-working-example -di-configurazione-log4j-rollingfileappender-via-properties – Stefan

risposta

8

Ci sono infatti due opzioni:

  1. uso logback con le sue dimensioni e il tempo innescando la politica: http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP
  2. c'è TimeAndSizeRollingAppender per Log4J da qui: http://www.simonsite.org.uk/

Tenete a mente che sia le opzioni usano la rinomina dei file. Consideralo attentamente se c'è un altro script che sposta automaticamente questi file. La ridenominazione dei file è rischiosa quando due processi gestiscono lo stesso file.

Il mio suggerimento è quello di scrivere direttamente nel nome del file di registro immutabile nel modello: myapp- {dd.MM.yyyy}. {X} .log. In questo modo "rolling" sta semplicemente chiudendo un file e aprendone uno nuovo. Nessun nome. Nessun thread in background.

+0

It workrd. Molte grazie. –

3

La risposta rapida è "no". Guardando log4j's javadoc: https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html

Esistono solo due appendici di file predefiniti: DailyRollingFileAppender e RollingFileAppender (e il primo non è consigliato perché presenta problemi di sincronizzazione).

Per ottenere ciò che si desidera, è necessario creare il proprio appender, estendere RollingFileAppender e modificarlo per far scorrere il file se il giorno cambia. La modifica sarebbe in metodo:

protected void subAppend(LoggingEvent event) 

Potete vedere la sua fonte qui: http://www.docjar.com/html/api/org/apache/log4j/RollingFileAppender.java.html (linea 274).

Hai solo bisogno di copiare e incollare il codice e cambiare il se rollOver chiamata in base alle proprie esigenze.

2

Sotto XML di configurazione farà il lavoro: JAR richiesto: log4j-rolling-appender-20150607-2059

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration debug="true" 
    xmlns:log4j='http://jakarta.apache.org/log4j/'> 
    <appender name="file" 
     class="uk.org.simonsite.log4j.appender.TimeAndSizeRollingAppender"> 
     <param name="File" value="D:\\App.log" /> 
     <param name="Threshold" value="DEBUG" /> 
     <param name="DatePattern" value=".yyyy-MM-dd" /> 
     <param name="MaxFileSize" value="1KB" /> 
     <param name="MaxRollFileCount" value="100" /> 
     <param name="ScavengeInterval" value="30000" /> 
     <param name="BufferedIO" value="false" /> 
     <param name="CompressionAlgorithm" value="GZ" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="file" /> 
    </root> 

</log4j:configuration> 
Problemi correlati