2010-07-25 15 views
34

È possibile comprimere i file di registro (lo faccio tramite RollingFileAppender)?Comprimi file Log4j

+0

Cosa intendi con compres? Semplificare? O davvero comprimi, che devi decomprimere? –

+0

Comprimi (zippato, ad esempio) per archiviare –

risposta

37

log4j extras ha il supporto per che:

basta aggiungere il seguente alla configurazione RollingFileAppender ed avente l'estremità nome del file in .gz saranno automagicamente comprimere i file di log:

<appender...> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="/wombat/foo.%d{yyyy-MM}.gz"/> 
    </rollingPolicy> 
</appender> 

assegno qui per alcuni dettagli nella javadoc:

http://logging.apache.org/log4j/companions/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html

speranza che ha aiutato

+11

Come posso aggiungerlo al file delle proprietà? > 'log4j.appender.DefaultLog = org.apache.log4j.RollingFileAppender log4j.appender.DefaultLog.File = $ {mailbox.root} /logs/application.log log4j.appender.DefaultLog.MaxFileSize = 50MB log4j.appender .DefaultLog.MaxBackupIndex = 100 log4j.appender.DefaultLog.layout = org.apache.log4j.PatternLayout log4j.appender.DefaultLog.layout.ConversionPattern =% d% p [% c] -% m% n' – MiKu

+1

cosa sono ** per? – imdhmd

+0

È come si specifica un jolly in Java per includere le directory, invece di '*' che è solo per i file. – hd1

2

So che questo non risponde esattamente alla tua domanda, ma propone una soluzione alternativa.

Il modo in cui gestiamo il processo batch alla fine della giornata che comprime tutti i file di registro precedenti alla data odierna, eliminati prima di una settimana e li copia su un altro file server . In questo modo l'applicazione non ha bisogno di consumare alcun ciclo di CPU facendo questo e sul server abbiamo registri che non sono più vecchi di una settimana e su un altro file server abbiamo file di registro più vecchi.

1

L'unica altra cosa che vedo è aggiornare log4j a più di 1.3.15/1.4 e utilizzare il rullo TimeBasedRollingPolicy per abilitare la compressione automatica, ma ciò richiederebbe un aggiornamento di log4j essenzialmente (e anche la compatibilità dell'app)

Hmmm..può essere un'altra cosa migliore da fare è lasciare che log4j esegua un comando una volta che il file è stato lanciato. Quindi, invece di gzip, posso usare qualche altra logica di compressione come bzip, o lzop, ecc., Sarebbe un altro approccio se oggi ho questa funzione in log4j.

16

Mi sono imbattuto in questa grande risposta, ma poi ho continuato a indagare un po 'e log4j 2 è uscito!

Ora puoi avere la compressione con la libreria di base e molto, molto altro ... è semplicemente fantastico!

RollingFileAppender - Stavo cercando qualcosa che avesse sia timeBased sia sizeBased rolling, e con compressione ... ha entrambi! e posso lasciare la mia libreria syslog4j dato che anche questa ha!

Si prega di non utilizzare log4j 1.2 + extra a meno che non sia necessario.

+0

Sono d'accordo. È fantastico che ora abbiamo lo standard in log4j 2, ma al momento di questo commento, log4j 2 è in beta.Continuo a incoraggiare chiunque possa, utilizzare la versione beta e contribuire a migliorarlo prima del rilascio. –

+0

sì, la beta era programmata per terminare a giugno ma è ancora in corso ... un peccato. Ha funzionato bene per me, ma la politica non impone alcun codice beta in produzione. – Daren