Kontext:log4j FileAppender schaltet nicht in die neue Datei, wenn logrotate die Datei log dreht
Ich möchte log4j verwenden prüfungsbezogene Protokolle an eine bestimmte Protokolldatei zu schreiben, sagen wir mal audit.log. Ich möchte nicht syslogappender (udp based) verwenden, weil ich nicht tolerant gegenüber Datenverlust sein will. Außerdem verwende ich logrotate, um das audit.log zu rotieren, wenn die Datei eine bestimmte Größe erreicht.
Problem:
mir begegnet ist, ist, dass, wenn logrotate die audit.log Datei dreht sich um audit.log.1, log4j andere audit.log.1 hält das Schreiben als die audit.log Schreiben .
Mögliche Ansätze:
Ich weiß, ich RollingFileAppender können Sie die Log-Rotation außer Gebrauch logrotate zu tun, also wenn RollingFileAppender die Datei rollt, schalten Sie es in die neue Datei ohne Probleme. Aber der Grund, warum ich rollingfileappender nicht benutzen kann, ist, dass ich die rotierende Funktion von logrotate benutzen möchte, um einige Skripte nach der Rotation auszulösen, die nicht durch rollingfileappender bereitgestellt werden können.
Eine weitere verzweifelte Möglichkeit, die ich mir vorstellen kann, ist selbst einen log4j angepassten Appender zu schreiben, um die Protokolldatei (audit.log.1) zu schließen und den neuen zu öffnen (audit.log), wenn die Datei rotiert wird.
Ich habe nie ExternallyRolledFileAppender verwendet, aber wenn es möglich ist, root logrotate zu verwenden, um das Signal an ExternallyRolledFileAppender zu senden und log4j bewusst machen, die Datei gedreht wird, und zu schreiben in die neue Datei?
Frage:
Nur frage mich, gibt es einige appender wie das bereits erfunden/geschrieben? oder habe ich andere Möglichkeiten, dies zu lösen?
Perfekte Weise eine Frage +1 – Deepak