2011-11-03 3 views
6

Vorrei creare un file di registro che può essere rollato all'inizio del giorno successivo o se viene raggiunto alla dimensione specificata del file e il file di registro deve essere contenuto nella cartella della data. Il formato della cartella è YYYYMMDD (/20111103/mylogfile.log)Come controllare il file di log con il rolling giornaliero e la dimensione massima del file con log4j?

È possibile eseguire questa operazione da Log4j senza implementare una classe personalizzata?

Ora sto usando log4j e log4j-extra, ho impostato l'attributo FileNamePattern come definito nella log4j API per rotolare il mio file di tutti i giorni e impostare la dimensione massima del file di 50 MB.

mio log4j.xml è:

<appender name="MYAPPENDER" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="encoding" value="UTF-8" /> 
    <param name="append" value="true" /> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" /> 
    </rollingPolicy> 
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> 
     <param name="maxFileSize" value="50000000" /> 
    </triggeringPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" /> 
    </layout> 
</appender> 

Risultato di impostazione di cui sopra è che file di registro non è rotolato a inizio prossimi giorni, ma se la dimensione del file ha raggiunto a 50 MB, il file di log sarà implementato.

Si prega di aiutare a consigliarmi. m (_ _) m

risposta

0

Dal RollingFileAppender documentation

Per essere di qualche utilità, un'istanza RollingFileAppender deve avere sia un RollingPolicy e TriggeringPolicy impostare .... TimeBasedRollingPolicy funge sia da RollingPolicy e a TriggeringPolicy.

Di conseguenza, SizeBasedTriggeringPolicy viene ignorato poiché TimeBasedRollingPolicy è configurato sopra. L'unico modo per soddisfare i tuoi requisiti sarà l'implementazione di classi personalizzate.

Inoltre, se la dimensione di un file di registro è davvero importante, è possibile utilizzare automatic gzip compression per eliminare SizeBasedTriggeringPolicy e far scorrere i registri solo ogni giorno.

3

Per attivare la laminazione quotidiano: class = "org.apache.log4j.DailyRollingFileAppender"

e per consentire la dimensione massima del file e il numero di file di backup

<param name="MaxFileSize" value="200MB" /> 
<param name="MaxBackupIndex" value="4" /> 

Ma non è possibile inserire MaxFileSize con DailyRolling, quindi è possibile utilizzare il rolling file appender

Un esempio:

<appender name="MAIN_FA" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="logs/main.log" /> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.log'" /> 
    <param name="append" value="false" /> 
    <param name="Threshold" value="ALL" /> 
    <param name="MaxFileSize" value="200MB" /> 
    <param name="MaxBackupIndex" value="4" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> 
    </layout> 
</appender> 

Oppure si può fare questo http://wiki.apache.org/logging-log4j/DailyRollingFileAppender

6

lavora quotidianamente per me con xml in questione trasformato solo in log4j.proprietà equivalenti a rotolare dopo che 100KB (per scopi di test):

# Root logger option 
log4j.rootLogger=INFO, file 

# Direct log messages to a file 
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender 
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy 
log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/logs/%d{yyyyMMdd}/myLog_%d{yyyyMMddHH}.log 
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy 
log4j.appender.file.TriggeringPolicy.maxFileSize=100000 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
log4j.appender.file.Append=true 

Questo creerà una directory timestamp (una directory al giorno - optional) con i registri con il seguente formato (uno ogni ora a scopo di test - il cambiamento FileNamePattern in base alle proprie esigenze):

myCompanyLog_20160203 30.log

myCompanyLog_20160203 30.log