2009-11-10 19 views
18

Uso Log4j con RollingFileAppender per creare una rotazione del registro in base alle dimensioni.Come ruotare i file di registro in base al tempo piuttosto che alle dimensioni in Log4j?

Come posso configurarlo per accedere a ciascun file per un determinato periodo di tempo prima di ruotare?

Ad esempio, in modo che ogni file di registro contenga un'ora di log, ruotando nella parte superiore di ogni ora?

ho configurare Log4j programmazione in Java utilizzando un oggetto Properties (al contrario di un file log4j.properties)

risposta

30

Probabilmente si desidera utilizzare uno DailyRollingFileAppender. Ad esempio, per rollarli ogni ora, utilizzi un DatePattern di '.'yyyy-MM-dd-HH. Per un file log4j.properties:

log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH 
... 

O per la configurazione programmatica:

DailyRollingFileAppender appender = new DailyRollingFileAppender(); 
appender.setDatePattern("'.'yyyy-MM-dd-HH"); 

Logger root = Logger.getRootLogger(); 
root.addAppender(appender); 

Purtroppo, utilizzando un DailyRollingFileAppender significa che non è possibile limitare la dimensione del file - questo potrebbe essere problematico se avete tonnellate di tronchi nel periodo di rotolamento dato.

+0

ma non ci sono potenziali problemi di threading? Ho sentito di casi in cui non riesce a rotolare se altri thread stanno registrando. – sproketboy

+0

È stato osservato che DailyRollingFileAppender presenta problemi di sincronizzazione e perdita di dati. Il compagno extra di log4j include alternative che dovrebbero essere considerate per le nuove distribuzioni e che sono discusse nella documentazione per org.apache.log4j.rolling.RollingFileAppender. – okwap

2

Utilizzare un DailyRollingFileAppender.

In particolare, l'impostazione della proprietà 'datePattern' su '.'yyyy-MM-dd-HH farebbe ruotare il file ogni ora.

3

L'altra cosa da fare attenzione con qualsiasi appender di file rotanti è assicurarsi che solo una JVM acceda a un particolare file di registro alla volta. Ciò è dovuto al fatto che log4j memorizza nella cache la dimensione del file di registro per motivi di prestazioni, e il "rolling" diventerà instabile se più JVM accedono agli stessi file.

+0

Scusa, cosa intendi per "vm"? – DivideByHero

+0

Intendo la macchina virtuale java. Ogni istanza dell'eseguibile 'java'. –

0

È necessario utilizzare DailyRollingFileAppender. Nonostante il suo nome fuorviante, può essere configurato in modo da funzionare a intervalli di tempo configurabili fino a minuti.

3

Inoltre,

log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender 
**log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH** 

La seguente lista mostra tutti i modelli di data che si sono definiti da log4j,

Minutely '.'yyyy-MM-dd-HH-mm application.log.2013-02-28-13-54 
Hourly '.'yyyy-MM-dd-HH application.log.2013-02-28-13 
Half-daily '.'yyyy-MM-dd-a application.log.2013-02-28-AM app.log.2013-02-28-PM 
Daily '.'yyyy-MM-dd application.log.2013-02-28 
Weekly '.'yyyy-ww application.log.2013-07 app.log.2013-08 
Monthly '.'yyyy-MM application.log.2013-01 app.log.2013-02 
Problemi correlati