2015-10-20 13 views
5

löschen (FYI Ich suchte schon viele Dokumente in Internet heraus. Ich bin Sturm-0.10.0-beta1 verwenden. Konfigurationsdatei von log4j2 Storm worker.xml ist)Wie alte Protokolle mit log4j2

Jetzt, Ich versuche log4j2 zu verwenden.

Ich suche nach Weg, alte Protokolle zu löschen, aber ich kann nicht herausfinden. Teil der Konfiguration ist wie folgt.

<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> 

Zuerst erwartete ich, dass Protokolldateien, die älter als 3 Tage sind, entfernt werden.

Aber tatsächlich, es tut es nicht.

Also frage ich mich, ob es eine Möglichkeit gibt, alte Protokolle zu entfernen oder nicht.

Wenn es einen Weg gibt, den ich noch nicht verstanden habe, benachrichtigen Sie mich bitte.

+0

hast du jemals versucht was passiert? Soweit ich mich erinnere log4j bereits veraltete Dateien gelöscht, so nehme ich an log4j2 wird auch. Setzen Sie einfach Ihre Rolloverstrategy auf 2 und ändern Sie Ihr Systemdatum, um dies zu versuchen ... – Marged

+0

@Marged Vielen Dank für Ihre Kommentare. Auch wenn das aktuelle Projekt zeigt, dass ich nicht arbeite, werde ich es erneut versuchen. – obanadingyo

Antwort

1

Sie können weitere Hintergrundinformationen in dieser JIRA-Eintrag für log4j finden:

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

Es scheint der Fall zu sein, dass die automatische alte Protokolldateien zu löschen funktioniert nicht, wenn Sie nur einen verwenden TimeBasedTriggeringPolicy

+0

Vielen Dank für den Link. Schließlich habe ich herausgefunden, dass es bis jetzt keine Möglichkeit gibt, zeitbasierte alte Protokolle zu entfernen. Laut dem letzten Kommentar unter diesem Link (https://issues.apache.org/jira/browse/LOG4J2-435) laufen die Jobs, die das Löschen alter zeitbasierter Logs ermöglichen.Daher entschied ich mich für eine größenbasierte Rollover-Strategie mit Index,% i, – obanadingyo

4

Seit 2.5 unterstützt Log4j eine custom Delete action, die bei jedem Rollover ausgeführt wird.

Sie, welche Dateien gelöscht werden, durch eine beliebige Kombination steuern:

  1. Namen (passend ein glob oder ein regex)
  2. Age ("löschen, wenn 14 Tage alt oder älter")
  3. Graf („halten nur die letzten 3“)
  4. Größe („halten nur die neuesten Dateien bis zu 500 MB“)

Benutzer, die eine feinere Kontrolle darüber benötigen, welche Dateien gelöscht werden sollen, können eine Skriptbedingung mit einer beliebigen unterstützten JSR-223-Skriptsprache angeben.

Bitte überprüfen Sie die documentation, es hat drei vollständige Beispiele, die nützlich sein können.

Für Ihre Frage, sollte diese Schnipsel arbeiten:

<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> 

Schließlich seien Sie vorsichtig! Es gibt keine Möglichkeit, auf diese Weise gelöschte Dateien wiederherzustellen. :-)

+0

Gibt es eine Option, dies über Log4j2 2.3-Version zu erreichen? – pna

+1

Nein, ich fürchte nicht. Die Löschaktion wurde in 2.5 hinzugefügt ... Sie können eine Rückportfixierung vorschlagen (idealerweise einen Patch mit Komponententests bereitstellen), aber es wird kein einfacher Port sein, da die Delete-Implementierung die Java 7 Path API stark verwendet ... –

Verwandte Themen