Wie konfiguriere ich log4j, um nur Protokolldateien für die letzten sieben Tage aufzubewahren?

Lesezeit: 6 Minuten

Ich habe das folgende Protokollierungsproblem mit mehreren Java-Anwendungen log4j zum Loggen:

Ich möchte, dass Protokolldateien täglich gedreht werden, z

log.2010-09-10
log.2010-09-09
log.2010-09-08
log.2010-09-07
log.2010-09-06
log.2010-09-05
log.2010-09-04

Aus Datenschutzgründen dürfen wir in meinem Unternehmen Logfiles jedoch nicht länger als sieben Tage aufbewahren. Also die Generierung der nächsten nächsten Logdatei log.2010-09-11 sollte das Löschen von auslösen log.2010-09-04. Ist es möglich, ein solches Verhalten mit zu konfigurieren log4j? Wenn nicht, kennen Sie eine andere elegante Lösung für diese Art von Logging-Problem?

  • Dies ist kein Duplikat, RollingFileAppender ist nicht das, was OP will, da nur DailyRollingFileAppender Dateien täglich rotiert!

    – Web-Gerät

    31. Juli 2013 um 10:30 Uhr

  • Es gibt eine Lösung für Ihre Antwort mit log4j und Java – stackoverflow.com/a/58729657/7179509

    – Maksym

    6. November 2019 um 11:59 Uhr

Ich nehme an, Sie verwenden RollingFileAppender? In diesem Fall hat es eine Eigenschaft namens MaxBackupIndex die Sie einstellen können, um die Anzahl der Dateien zu begrenzen. Zum Beispiel:

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=7
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

  • Aber das würde die letzten 700 kB der Protokolldaten behalten, oder? Ich möchte die Protokolldaten der letzten 7 Tage unabhängig von der Größe der Protokolldatei aufbewahren.

    – Asmaier

    10. September 2010 um 9:35 Uhr

  • Da bekommt man tatsächlich eine Warnung MaxBackupIndex ist kein gültiges Mitglied von DailyRollingFileAppender. Meines Wissens gibt es keine Möglichkeit, dies mit log4j zu tun. Sie müssen die Tage selbst entfernen.

    – cbmeeks

    23. Mai 2013 um 14:48 Uhr


  • Ich glaube nicht, dass log4j.appender.R.MaxBackupIndex=1 nur 1 Protokolldatei auf dem Server behält. Ich hatte diese Einstellung, aber sehe, dass die alte Datei noch da ist.

    – Billionen

    22. März 2014 um 0:42 Uhr

  • log4j empfiehlt den beigesteuerten RollingFileAppender anstelle seines eigenen und unterstützt Rollover mit MaxBackupIndex und einer TimeBasedRollingPolicy. Sehen Protokollierung.apache.org/log4j/extras/apidocs/org/apache/log4j/…

    – Philipp

    4. Februar 2016 um 18:58 Uhr

  • Nachdem ich MaxBackupIndex konfiguriert hatte und festgestellt hatte, dass es mit org.apache.log4j.rolling.RollingFileAppender nicht funktionierte, habe ich mir die Quelle angesehen. Ich habe MaxBackupIndex nur in den Kommentaren gesehen. Ich neige dazu zu glauben, dass der Kommentar kopiert/eingefügt wurde und MaxBackupIndex nicht implementiert ist.

    – Daniel Bower

    25. September 2016 um 1:53 Uhr

Sie können Ihre Haushaltsführung in einem separaten Skript durchführen, das so eingestellt werden kann, dass es täglich ausgeführt wird. Etwas wie das:

find /path/to/logs -type f -mtime +7 -exec rm -f {} \;

  • Nur als Referenz: Ein anonymer Benutzer schlug eine Änderung vor, die Folgendes anhängt: „Um dies zu erweitern, wenn Sie große Protokolle haben / Speicherplatz sparen möchten, können Sie die rotierten Protokolle komprimieren und dann komprimierte Protokolle entfernen, die X Tage alt sind. Ich mache etwas wie: find /path/to/logs -type f -name “.Protokoll.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]” -exec bzip2 ‘{}’ \; && find /path/to/logs -type f -mtime +7 -name “.bz2″ -exec rm -f ‘{}’ \;”

    – Vogel612

    4. Oktober 2015 um 17:50 Uhr

Benutzer-Avatar
PhilDin

Laut folgendem Beitrag geht das mit log4j nicht: Use MaxBackupIndex in DailyRollingFileAppender -log4j

Soweit ich weiß, sollte es diese Funktionalität in log4j 2.0 schaffen, aber diese Bemühungen wurden abgelenkt. Laut der Logback-Website ist Logback der beabsichtigte Nachfolger von log4j, daher sollten Sie die Verwendung in Betracht ziehen.

Es gibt eine API namens SLF4J, die eine gemeinsame API für die Protokollierung bereitstellt. Es lädt die eigentliche Protokollierungsimplementierung zur Laufzeit, sodass es je nach der von Ihnen bereitgestellten Konfiguration möglicherweise java.util.log oder log4j oder logback oder eine andere Bibliothek verwendet, die Protokollierungsfunktionen bereitstellen kann. Es wird ein wenig Vorarbeit geben, um von der direkten Verwendung von log4j zur Verwendung von SLF4J überzugehen, aber sie bieten einige Tools, um diesen Prozess zu automatisieren. Sobald Sie Ihren Code für die Verwendung von SLF4J konvertiert haben, sollte das Wechseln der Protokollierungs-Backends einfach eine Änderung der Konfigurationsdatei sein.

Benutzer-Avatar
überfliegen

log4j2 unterstützt jetzt das Löschen alter Protokolle.

Schauen Sie sich an DefaultRolloverStrategy-Tag und in den Ausschnitten unten.

Es

  • erstellt bis zu 10 Archive am selben Tag,

  • analysiert das ${baseDir}-Verzeichnis, das Sie unter dem Eigenschaften-Tag mit einer maximalen Tiefe von 2 definieren, wobei der Protokolldateiname mit “app-*.log.gz” übereinstimmt.

  • Protokolle löschen, die älter als 7 Tage sind, aber die letzten 5 Protokolle behalten, wenn Ihre letzten 5 Protokolle älter als 7 Tage sind.

    <DefaultRolloverStrategy max="10">
      <Delete basePath="${baseDir}" maxDepth="2">
        <IfFileName glob="*/app-*.log.gz">
          <IfLastModified age="7d">
            <IfAny>
              <IfAccumulatedFileCount exceeds="5" />
            </IfAny>
          </IfLastModified>
        </IfFileName>
      </Delete>
    </DefaultRolloverStrategy>
    

Eine gute Debug-Option ist, wenn Sie Folgendes festlegen:

<Configuration status="trace">

und verwenden Sie die testMode-Option wie folgt:

        <DefaultRolloverStrategy>
          <Delete basePath="${baseDir}" testMode="true">
            <IfFileName glob="*.log" />
            <IfLastModified age="7d" />
          </Delete>
        </DefaultRolloverStrategy>
        

Sie können im Konsolenprotokoll sehen, welche Dateien gelöscht würden, ohne die Dateien sofort zu löschen.

Dabei bin ich auf diesen Appender gestoßen hier das tut, was Sie wollen, es kann so konfiguriert werden, dass es eine bestimmte Anzahl von Dateien behält, die nach Datum verschoben wurden.

Download: http://www.simonsite.org.uk/download.htm

Beispiel (groovy):

new TimeAndSizeRollingAppender(name: 'timeAndSizeRollingAppender',
   file: 'logs/app.log', datePattern: '.yyyy-MM-dd',
   maxRollFileCount: 7, compressionAlgorithm: 'GZ',
   compressionMinQueueSize: 2,
   layout: pattern(conversionPattern: "%d [%t] %-5p %c{2} %x - %m%n"))

  • Danke für den Link! Tolles Paket!

    – Daniel Widdis

    6. Oktober 2014 um 3:52 Uhr

Benutzer-Avatar
рüффп

Es gibt auch ein DailyRollingFileAppender

Bearbeiten: Nachdem Sie diese besorgniserregende Aussage gelesen haben:

Bei DailyRollingFileAppender wurden Synchronisationsprobleme und Datenverlust beobachtet. Der log4j-Extras-Begleiter enthält Alternativen, die für neue Bereitstellungen in Betracht gezogen werden sollten und die in der Dokumentation für org.apache.log4j.rolling.RollingFileAppender erörtert werden.

aus der obigen URL (was ich vorher nie realisiert habe), dann die log4j-Extras scheint eine bessere Option zu sein.

  • Danke für den Link! Tolles Paket!

    – Daniel Widdis

    6. Oktober 2014 um 3:52 Uhr

Benutzer-Avatar
Benutzer444904

Es gibt noch eine andere Möglichkeit DailyRollingFileAppender. aber es fehlt die Funktion zum automatischen Löschen (7 Tage Protokoll behalten), nach der Sie suchen

Probe

log4j.appender.DRF=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRF.File=example.log
log4j.appender.DRF.DatePattern='.'yyyy-MM-dd

Ich stoße auf etwas Anruf org.apache.log4j.CompositeRollingAppenderdie beide Merkmale des kombiniert RollingFileAppender (maxSizeRollBackups, Anzahl der Sicherungsdatei) und DailyRollingFileAppender (Rolle bis zum Tag).

Aber habe das nicht ausprobiert, scheint nicht die Standardfunktion von 1.2 branch log4j zu sein.

  • CompositeRollingAppender klang vielversprechend, aber ich habe mir seinen Code angesehen, und er implementiert (noch!) das Löschen alter Dateien nur beim Rollover von Dateien basierend auf der Größe, nicht beim Rollover basierend auf dem Datum. Schade, denn das sollte nicht schwer umzusetzen sein.

    – Teemu Leisti

    23. März 2017 um 9:20 Uhr


1055590cookie-checkWie konfiguriere ich log4j, um nur Protokolldateien für die letzten sieben Tage aufzubewahren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy