2009-06-26 15 views
50

Wie bekomme ich Log4j, um alte rotierende Protokolldateien zu löschen? Ich weiß, dass ich automatisierte Jobs (Cron für UNIX und geplante Aufgabe für Windows) einrichten kann, aber ich möchte es plattformübergreifend, und ich möchte es in unserer Anwendung Protokollkonfiguration als Teil unserer Anwendung, anstatt in separaten Code außerhalb in OS spezifische Skriptsprachen. Unsere Anwendung ist nicht in OS-Skriptsprachen geschrieben, und ich möchte diesen Teil nicht in ihnen verwenden.Wie kann ich Log4j löschen alte rotierende Protokolldateien zu löschen?

Antwort

44

RollingFileAppender tut dies. Sie müssen maxBackupIndex nur auf den höchsten Wert für die Sicherungsdatei setzen.

+42

Gibt es eine Möglichkeit, dies mit DailyRollingFileAppender zu tun? –

+3

Nein, nicht mit dem Standard - siehe Antwort von user3195649 unten. Glauben Sie, die Apache Extras für log4j haben etwas ähnliches. –

+0

Entfernt dies auch alte Logfiles, die zuvor von DailyRollingFileAppender archiviert wurden (* .log.2016-09-12)? – mvdb

37

Protokolle rotieren aus einem bestimmten Grund, so dass Sie nur so viele Protokolldateien speichern. In log4j.xml können Sie diese zu Ihrem Knoten hinzufügen:

<param name="MaxBackupIndex" value="20"/> 

Der Wert sagt log4j.xml nur 20 Dateien gedreht Protokoll halten um. Sie können dies auf 5 begrenzen, wenn Sie wollen oder sogar 1. Wenn Ihre Anwendung nicht so viele Daten protokolliert und Sie 20 Protokolldateien aus den letzten 8 Monaten haben, aber Sie brauchen nur eine Woche im Wert von Logs, dann denke ich Sie müssen Sie Ihre Log4j.xml "MaxBackupIndex" und "MaxFileSize" Parameter optimieren.

Alternativ, wenn Sie eine Eigenschaftsdatei (anstelle des xml) verwenden und wollen 15 Dateien speichern (zum Beispiel)

log4j.appender.[appenderName].MaxBackupIndex = 15 
+6

Funktioniert das mit DailyRollingFileAppender? – rogerdpack

7

Es gibt keinen Standardwert zum Steuern des Löschens alter Protokolldateien, die von DailyRollingFileAppender erstellt wurden. Sie können jedoch einen eigenen angepassten Appender schreiben, der alte Protokolldateien auf die gleiche Weise löscht wie das Festlegen von maxBackupIndex für RollingFileAppender.

Einfache Anleitung here

Von 1:

Wenn Sie den Apache Log4J DailyRollingFileAppender für eine tägliche Protokolldatei verwenden möchten, können Sie die maximale Anzahl von Dateien möchten benötigen, um zu spezifizieren, die sollte gehalten werden. Genauso wie RollingFileAppender unterstützt maxBackupIndex. Die aktuelle Version von Log4j (Apache log4j 1.2.16) bietet jedoch keinen Mechanismus zum Löschen alter Protokolldateien, wenn Sie DailyRollingFileAppender verwenden. Ich habe versucht, kleine Änderungen in der ursprünglichen Version von DailyRollingFileAppender vorzunehmen, um die Eigenschaft maxBackupIndex hinzuzufügen. Es wäre also möglich, alte Protokolldateien zu bereinigen, die für die zukünftige Verwendung möglicherweise nicht benötigt werden.
Verwandte Themen