Wie konfiguriere ich log4j, um nur die Protokolldateien der letzten sieben Tage zu behalten?
Habe ich die folgenden Protokoll-problem mit mehreren Java-Anwendungen mit log4j
für die Anmeldung:
Ich möchte die log-Dateien werden täglich gedreht, wie
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
Aber aus Gründen der Datensicherheit dürfen wir nicht behalten, log-Dateien, die länger als sieben Tage in meiner Firma. Also die generation des nächsten nächsten log-Datei log.2010-09-11
auslösen sollte, die Löschung von log.2010-09-04
. Ist es möglich zu konfigurieren, so ein Verhalten mit log4j
? Wenn nicht, wissen Sie, eine andere elegante Lösung für diese Art von logging problem?
InformationsquelleAutor der Frage asmaier | 2010-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie führen Ihren Haushalt in einem separaten Skript, das sein kann, cronned, die täglich ausgeführt werden. So etwas wie dieses:
InformationsquelleAutor der Antwort dogbane
Ich nehme an, du bist mit RollingFileAppender? In dem Fall, es hat eine Eigenschaft namens
MaxBackupIndex
dem Sie festlegen können, um die Anzahl der Dateien limitiert. Zum Beispiel:InformationsquelleAutor der Antwort dty
Gemäß der folgenden post Sie nicht tun können diese mit log4j: Verwenden MaxBackupIndex in DailyRollingFileAppender -log4j
Soweit ich weiß, wurde diese Funktionalität soll in log4j 2.0 ist aber, dass der Aufwand got sidetracked. Nach der logback website, logback ist der vorgesehene Nachfolger von log4j, so könnten Sie erwägen, die.
Gibt es eine API namens SLF4J bietet eine gemeinsame API zur Protokollierung. Es wird geladen, bis die eigentliche logging-Implementierung zur Laufzeit, so dass je nach Konfiguration, die Sie eingegeben haben, könnte es mit java.util.anmelden oder log4j oder logback oder andere Bibliothek in der Lage Protokollierung Einrichtungen. Werde es ein bisschen nach vorne arbeiten gehen von der Verwendung von log4j direkt mit SLF4J, aber Sie bieten einige tools, um diesen Prozess zu automatisieren. Sobald Sie konvertiert haben, Ihren code zu verwenden, SLF4J, Schalt-logging-backends sollte einfach ein Fall der änderung der config-Datei.
InformationsquelleAutor der Antwort PhilDin
log2j hat jetzt Unterstützung, um löschen Sie alte Protokolle. Werfen Sie einen Blick auf DefaultRolloverStrategy tag und auf ein snippet unten. Es schafft bis zu 10 Archive am gleichen Tag, analysieren die ${baseDir} Verzeichnis, definieren Sie in den Eigenschaften tag-bei max Tiefe 2 mit den log-Dateinamen passende "app-*.log.gz" und löschen logs älter als 7 Tage sind doch immer die letzten 5 logs, wenn Sie Ihre letzten 5 logs die älter sind als 7 Tage.
InformationsquelleAutor der Antwort skim
Gibt es auch einen DailyRollingFileAppender;
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html
Bearbeiten:
Nach der Lektüre dieser besorgniserregenden Aussage;
aus der oben genannten URL (die ich nie realisiert vor), dann sieht es aus wie eine bessere Wette; http://logging.apache.org/log4j/companions/extras/apidocs/index.html
InformationsquelleAutor der Antwort Qwerky
Es ist eine weitere option DailyRollingFileAppender. aber es fehlt die auto-löschen (halten Sie 7 Tage log) - Funktion, die Sie suchen
Probe
Ich komme über etwas rufen org.apache.log4j.CompositeRollingAppenderdie beides miteinander verbinden, die Funktionen des RollingFileAppender (maxSizeRollBackups, Nein. der backup Datei) und DailyRollingFileAppender (roll-Tag).
Aber noch nicht ausprobiert, scheint nicht der standard-1.2-Zweig log4j-Funktion.
InformationsquelleAutor der Antwort user444904
Stieß ich auf diesen appender hier das tut, was Sie wollen, es kann konfiguriert werden, um immer eine bestimmte Anzahl von Dateien, die wurden überrollt von Datum.
Download: http://www.simonsite.org.uk/download.htm
Beispiel (in groovy):
InformationsquelleAutor der Antwort Green Man
Wenn Sie mit Linux arbeiten, können Sie konfigurieren Sie einen cron-job mit tmpwatch.
Meisten Linux-Systeme haben eine tmpwatch cron-job, der bereinigt das Verzeichnis /tmp. Sie können weitere hinzufügen, die überwacht log-Verzeichnis und löscht Dateien, die über 7 Tage alt.
Wenn Sie mit einem anderen system, es gibt wahrscheinlich gleichwertig utilities.
InformationsquelleAutor der Antwort emory
Verwenden Sie die Einstellung
log4j.appender.FILE.RollingPolicy.FileNamePattern
z.B.log4j.appender.FILE.RollingPolicy.FileNamePattern=F:/logs/filename.log.%d{dd}.gz
für die Aufbewahrung von logs von einem Monat vor dem Rollen über.Ich nicht warten, für einen Monat zu prüfen, aber ich habe versucht, mit mm (z.B. Minuten) und bestätigt, es überschreibt, so nehme ich an, dass es für alle Muster.
InformationsquelleAutor der Antwort Ketan K Shah
Klasse
DailyRollingFileAppender
verwendet die DatePattern - option, um den rollierenden. Diesem Muster Folgen sollte, dieSimpleDateFormat
Konventionen von Std. Ed. v1.4.2. So, haben wir die VerwendungE
option (Tag in der Woche). Zum Beispiel:Sehen Sie mehr über
DailyRollingFileAppender
Klasse auslog4j
javadoc hier. Leider ist die Java-1.4.2-Dokumentation ist nicht mehr online, aber Sie können eine Kopie hier.InformationsquelleAutor der Antwort Al Foltran
Hatte ich:
Wie andere vor mir, die DEBUG-option zeigte mir den Fehler:
Hier ist eine Idee, die ich noch nicht ausprobiert, nehme ich die DatePattern, so dass die Dateien gegenseitig überschreiben nach dem gewünschten Zeitraum. Zu behalten ein Jahr Wert, ich könnte versuchen, Einstellung:
Würde es funktionieren oder würde es einen Fehler hervorrufen ?
Wie, es wird ein Jahr dauern, um das herauszufinden, könnte ich versuchen:
aber es wird noch einen Monat dauern, um das herauszufinden.
InformationsquelleAutor der Antwort user835745
Trotz der Gründung eines chrone job, für die Aufgabe, die wir verwenden können, log4j2.Eigenschaften Datei im config Ordner von logstash. Haben Sie einen Blick auf den unten stehenden link, wird dies hilfreich sein.
https://github.com/elastic/logstash/issues/7482
InformationsquelleAutor der Antwort Vaibhav Jain
Erstelle ich diese Methode, und rufen Sie es mit dem schließen der Anwendung:
InformationsquelleAutor der Antwort Martin Riedel