Frage

Ich mag das Protokoll so lange rollen, wie die Anwendung ausgeführt wird, aber ich mag das Protokoll neu beginnen, wenn die Anwendung neu gestartet wird.

Aktualisiert: Basierend auf Ericksons Feedback, mein appender sieht wie folgt aus:

   <appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
      <param name="File" value="my-server.log"/>
      <param name="Append" value="false" />
      <param name="MaxFileSize" value="10MB"/>
      <param name="MaxBackupIndex" value="10"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern"
            value="%d{ISO8601} %p - %t - %c - %m%n"/>
      </layout>
   </appender>

Ich habe einfach die folgende Zeile:

<param name="Append" value="false" />

Es kürzt nun die Basisprotokolldatei beim Start, aber es läßt die gewalzten Dateien allein.

War es hilfreich?

Lösung

Wenn Sie den append Parameter auf false gesetzt ist, wird die Basisprotokolldatei werden „gestartet frisch“, wenn die Anwendung neu gestartet. Meinen Sie, dass Sie keine „gerollt“ Log-Dateien zu löschen?

Andere Tipps

Ich habe einigen benutzerdefinierten Code geschrieben meine RollingFileAppender zu finden (was unnötig schwer ist, den Zugang zu in log4j zu bekommen!), Die ich dann rollen verursachen. Ich habe meinen Code unten für eine einzelne Anwendung angepasst. Ich verwende Code ähnlich wie diesen beim Start der Anwendung auf meine Protokolle zu zwingen zu rollen (wenn nicht leer ist), so dass ich immer in einem frischen Protokoll starten, aber nie Protokoll löschen, aber die älteste.

Dieser Code nimmt einen bestimmten Logger und die Logger Hierarchie Schleifen, bis er einen Logger findet, die Appen angebracht hat. Wenn es nie der Fall ist, dann gibt es auf. Ist dies der Fall, kehrt er alle Appen zu diesem Logger angebracht über und für jeden, der ein RollingFileAppender ist, zwingt es das Protokoll zu rollen.

So etwas wie dies sollte viel einfacher in log4j zu tun, aber ich habe nicht einen einfacheren Weg, es zu tun.

gefunden
public void rollLogFile(Logger logger) {
  while (logger != null && !logger.getAllAppenders().hasMoreElements()) {
    logger = (Logger)logger.getParent();
  }

  if (logger == null) {
    return;
  }

  for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) {
    final Appender appender = (Appender)e2.nextElement();
    if (appender instanceof RollingFileAppender) {
      final RollingFileAppender rfa = (RollingFileAppender)appender;
      final File logFile = new File(rfa.getFile());
      if (logFile.length() > 0) {
        rfa.rollOver();
      }
    }
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top