it-swarm.com.de

So löschen Sie alte Protokolle mit log4j2

(F.Y.I. Ich habe bereits viele Dokumente im Internet durchsucht. Ich verwende storm-0.10.0-beta1. Die Konfigurationsdatei von log4j2 in Storm ist worker.xml.)

Jetzt versuche ich, log4j2 zu verwenden.

Ich suche nach Möglichkeiten zum Löschen alter Protokolle, kann dies jedoch nicht herausfinden. Ein 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 habe ich erwartet, dass Protokolldateien, die älter als 3 Tage sind, entfernt werden.

Tatsächlich aber nicht.

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

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

7
obanadingyo

Seit 2.5 unterstützt Log4j eine benutzerdefinierte Löschaktion die bei jedem Rollover ausgeführt wird.

Sie können steuern, welche Dateien gelöscht werden, indem Sie Folgendes kombinieren:

  1. Name (passend zu einem Glob oder einem Regex )
  2. Alter ("Löschen, wenn 14 Tage alt oder älter")
  3. Count ("Behalte nur die letzten 3")
  4. Größe ("nur die neuesten Dateien bis zu 500 MB speichern")

Benutzer, die eine noch genauere Kontrolle über die zu löschenden Dateien benötigen, können eine Skriptbedingung mit jeder unterstützten JSR-223-Skriptsprache angeben.

Bitte lesen Sie die Dokumentation , sie enthält drei vollständige Beispiele, die nützlich sein können.

Für Ihre Frage sollte dieses Snippet funktionieren:

  <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 sei vorsichtig! Auf diese Weise gelöschte Dateien können nicht wiederhergestellt werden. :-)

6
Remko Popma

Weitere Hintergrundinformationen finden Sie in diesem JIRA-Eintrag für log4j:

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

Es scheint der Fall zu sein, dass das automatische Löschen alter Protokolldateien nicht funktioniert, wenn Sie nur eine TimeBasedTriggeringPolicy verwenden.

1
Marged