2015-10-20 48 views
5

(FYI ho già cercato fuori molti documenti in Internet. Sto usando tempesta-0.10.0-beta1. File di configurazione di log4j2 a Storm è worker.xml)Come eliminare i vecchi registri con log4j2

Ora, Provo ad usare log4j2.

Sto cercando il modo di cancellare vecchi registri ma non riesco a scoprirlo. Parte della configurazione è come sotto.

<RollingFile name="SERVICE_APPENDER" 
      fileName="${sys:storm.home}/logs/${sys:logfile.name}.service" 
      filePattern="${sys:storm.home}/logs/${sys:logfile.name}.service.%d{yyyyMMdd}"> 
     <PatternLayout> 
      <pattern>${pattern}</pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
     </Policies> 
     <DefaultRolloverStrategy max="9"/> 
    </RollingFile> 

In un primo momento, ho aspettato che i file di log, che sono più vecchi di 3 giorni vengono rimossi.

Ma, in realtà, non è così.

Quindi, mi chiedo se c'è un modo per rimuovere vecchi log o no.

Se c'è un modo che non ho ancora catturato, per favore avvisami.

+0

hai mai provato cosa sta succedendo? Per quanto mi ricordo log4j già cancellato i file obsoleti, quindi presumo anche log4j2. È sufficiente impostare la rollovertrategy su 2 e modificare la data di sistema per provare questo ... – Marged

+0

@Marged Grazie per i vostri commenti. Anche se il progetto attuale mostra che non lavoro, proverò di nuovo. – obanadingyo

risposta

1

È possibile trovare maggiori informazioni in questo articolo JIRA per log4j:

https://issues.apache.org/jira/browse/LOG4J2-524

Sembra essere il caso che automatica eliminazione di vecchi file di log non funziona quando si utilizza solo un TimeBasedTriggeringPolicy

+0

Grazie per aver condiviso il link. Finalmente, ho scoperto che non c'è modo di rimuovere i vecchi registri basati sul tempo fino ad ora. Secondo l'ultimo commento a questo link (https://issues.apache.org/jira/browse/LOG4J2-435), sono in corso i lavori di fornitura dell'eliminazione dei vecchi registri basati sul tempo.Pertanto, ho deciso di utilizzare la strategia di rollover basata sulle dimensioni utilizzando l'indice,% i, – obanadingyo

4

Dal 2.5, Log4j supporta uno custom Delete action che viene eseguito su ogni rollover.

È possibile controllare quali file vengono eliminati da qualsiasi combinazione di:

  1. Nome (corrispondente ad una glob o un regex)
  2. Age ("cancella se 14 giorni di età o più anziani")
  3. Conte ("mantenere solo il più recente 3")
  4. Size ("mantenere solo i file più recenti fino a 500MB")

Gli utenti che necessitano di un controllo ancora più preciso su quali file eliminare possono specificare una condizione di script utilizzando qualsiasi linguaggio di script JSR-223 supportato.

Si prega di controllare il documentation, ha tre esempi completi che possono essere utili.

Per la vostra domanda, questo frammento di codice dovrebbe funzionare:

<DefaultRolloverStrategy> 
    <!-- 
     * only files in the log folder, no sub folders 
     * only rolled over log files (name match) 
     * only files that are 4 days old or older 
    --> 
    <Delete basePath="${sys:storm.home}/logs/" maxDepth="1"> 
     <IfFileName glob="*.service.????????" /> 
     <IfLastModified age="4d" /> 
    </Delete> 
    </DefaultRolloverStrategy> 

Infine, fate attenzione! Non c'è modo di recuperare i file cancellati in questo modo. :-)

+0

Esiste un'opzione per ottenere questo tramite la versione 2.3 di Log4j2? – pna

+1

No, non ho paura. L'azione Delete è stata aggiunta in 2.5 ... È possibile proporre una correzione per il backport (idealmente fornire una patch con i test unitari) ma non sarà una porta semplice poiché l'implementazione Delete utilizza l'API Java 7 Path pesantemente ... –