2010-09-29 8 views
10

Ich benutze log4j für die Protokollierung und eine Eigenschaftendatei für die Konfiguration. Derzeit sind meine Protokolldateien zu groß (3,5 GB sind für eine Protokolldatei zu groß). So denke, Ich muss RollingFileAppender verwenden - aber wenn ich das tun, wird die Protokolldatei weiterhin übermäßig groß. Ich glaube, ich habe es gerade falsch konfiguriert; Hat jemand eine funktioniert Beispiel für die Konfiguration von RollingFileAppender?Benötigen Sie ein funktionierendes Beispiel zum Konfigurieren von log4j RollingFileAppender über Eigenschaften

Für das Protokoll, meine aktuelle Konfiguration sieht wie folgt aus:

log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log 
log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender 
log4j.appender.MAIN_LOG.layout=com.mycompany.util.log.Log4JSimpleLayout 
log4j.appender.MAIN_LOG.DatePattern='.'yyyy-MM-dd 
log4j.appender.MAIN_LOG.MaxFileSize=10MB 
log4j.appender.MAIN_LOG.MaxBackupIndex=99 
log4j.appender.MAIN_LOG.append=true 
log4j.rootCategory=ALL, MAIN_LOG 

Eine Alternative zu RollingFileAppender auch eine feine Lösung wäre.

Antwort

15

Ich glaube, ich habe es gerade falsch konfiguriert; Hat jemand ein funktionierendes Beispiel zum Konfigurieren von RollingFileAppender?

Das scheint für mich @mcherm gut zu funktionieren. Siehe unten.

Sind Sie sicher, dass Sie die log4j.properties verwenden, die Sie denken, Sie sind? Versuchen Sie, die .File in einen anderen Pfad zu ändern, um zu sehen, ob die Protokollausgabe zur neuen Datei geht. Welche Version von log4j verwenden Sie? Ich laufe 1.2.15.

Hoffe, das hilft.


Ich habe das folgende Testprogramm:

package com.j256.ormlite; 
import org.apache.log4j.Logger; 
public class Foo { 
    private static Logger logger = Logger.getLogger(Foo.class); 
    public static void main(String[] args) { 
     for (int x = 0; x < 10000000; x++) { 
      logger.error("goodness this shouldn't be happening to us right here!!!!"); 
     } 
    } 
} 

Meine log4j.properties Datei enthält:

log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender 
log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log 
log4j.appender.MAIN_LOG.layout=com.j256.ormlite.Log4JSimpleLayout 
log4j.appender.MAIN_LOG.MaxFileSize=10MB 
log4j.appender.MAIN_LOG.MaxBackupIndex=5 
log4j.appender.MAIN_LOG.append=true 
log4j.rootCategory=ALL, MAIN_LOG 

Beachten Sie, dass ich die DatePattern entfernt, die für meine RollingFileAppender nicht gültig war. Mein Layout ist:

package com.j256.ormlite; 
import org.apache.log4j.spi.LoggingEvent; 
public class Log4JSimpleLayout extends org.apache.log4j.Layout { 
    @Override 
    public String format(LoggingEvent event) { 
     return "log message = " + event.getMessage().toString() + "\n"; 
    } 
    @Override 
    public boolean ignoresThrowable() { 
     return true; 
    } 
    public void activateOptions() { 
    } 
} 

Laufen mit -Dcatalina.base=/tmp/ ich Dateien in /tmp/logs/, die 5 bis Index # gehen und sind 10mb groß. Wenn ich die MaxFileSize oder die MaxBackupIndex abstimmen, passt es sich entsprechend an.

+0

Vielleicht, ja, mein Problem ist komplizierter als nur ein „Ich habe so konfigurieren, es ist nicht richtig“. Ich werde versuchen, dieses * wunderbare * Beispiel zu nehmen, das Sie mir gegeben haben, und sehen, ob ich das Problem replizieren kann und von dort fortfahre. – mcherm

5

Ihr Problem könnte mit der Tatsache sein, dass Sie ein DatePattern angeben. Das DatePattern soll mit dem DailyRollingFileAppender verwendet werden, um das Datum anzugeben, an dem die Protokolldatei rollen soll. Ich glaube nicht, dass es in Verbindung mit den MaxFileSize und MaxBackupIndex-Attributen verwendet werden kann. Mit Log4j können Sie Dateien basierend auf der Dateigröße oder dem Datum, aber nicht bei beiden, rollen.

2

Wenn Protokolldateien täglich gerollt werden sollen, sollten wir DailyRollingFileAppender anstelle von RollingFileAppender verwenden. Sie müssen nicht das MaxFileSize-Limit angeben, sondern nur DatePattern, um Dateien basierend auf der Häufigkeit zu erstellen. Ich habe die folgende Konfiguration in der Datei "log4j.properties" probiert, um Protokolldateien jede Minute ablaufen zu lassen.

log4j.appender.infoAppender = org.apache.log4j.DailyRollingFileAppender

log4j.appender.infoAppender.Schwelle = INFO

log4j.appender.infoAppender.DatePattern = '.' yyyy-MM-DD HH-mm

log4j.appender.infoAppender.File = C:

+1

Es wurde beobachtet, dass DailyRollingFileAppender Synchronisationsprobleme und Datenverlust aufweist. Der Zusatz "log4j extras" enthält Alternativen, die bei neuen Bereitstellungen berücksichtigt werden sollten und in der Dokumentation für org.apache.log4j.rolling.RollingFileAppender erläutert werden. von hier: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html – Somatik

0

starten, indem die -Dlog4j.debug JVM Parameter /logs/info.log. Das gibt ein paar nützliche Zeilen von Debug-Informationen aus, die anzeigen, welche Konfigurationsdatei es gefunden hat und benutzt, usw. Das sollte Ihnen einige Hinweise geben, was falsch läuft.

Siehe http://logging.apache.org/log4j/1.2/manual.html