2011-01-07 16 views
6

Ich versuche, das aktuelle Datum an die log4j-Protokolldatei anzufügen. So wäre es so etwas wie dieses:Dateiname mit Datum in Log4j

myApp-2011-01-07.log

Die Sache ist, dass ich möchte nicht den DailyRollingFileAppender verwenden. Grund ist, dass es ein anderes Skript gibt, das täglich ausgeführt wird, das alles im Protokollordner sichert. Dies läuft unter Tomcat5.5.

Ist das in log4j möglich?

+0

Entschuldigung, Sie wollen nicht, dass es auf das neue Datum übergeht? Was passiert dann um Mitternacht? –

Antwort

13

Ich glaube, Sie nur eine Systemeigenschaft in Code einstellen könnte das aktuelle Datum enthalten:

static{ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    System.setProperty("current.date", dateFormat.format(new Date())); 
} 

Dann in Ihrer log4j.xml Datei können Sie die Systemeigenschaft verwenden, wenn die Protokolldateinamen in der appender Angabe :

<appender name="MYAPPENDER" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="${user.home}/myApp-${current.date}.log" /> 

ETA: Nun, da ich darüber nachdenke Sie setzen die Eigenschaft haben können, um die Systemeigenschaft zur Einrichtung eines statischen Initialisierer verwendet sicher vor log4j konfiguriert ist.

+0

erstellt es eine neue Datei für neues Datum und Tag? oder es wird nur einmal erstellt? – Steve

+0

Es ist eine Weile her, seit ich Log4j angeschaut habe, aber ich denke, das Beispiel, das ich gab, würde nur eine Protokolldatei für den Tag erstellen, an dem Sie Ihren Prozess gestartet haben. Verwenden Sie einen "RollingFileAppender" in Ihrer log4j.xml, wenn Sie jeden Tag eine neue Protokolldatei wünschen. – BenjaminLinus

+0

Ich werde es versuchen, danke für die Beantwortung .. – Steve

5

Versuchen Sie dies in Ihrer log4j.properties Bildeinstellung:

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.File=example.log 

viel mehr Informationen können hier http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html

+0

Also, wenn ich mein Protokoll um Mitternacht drehen, was passiert mit den älteren Protokolldateien? Jede Protokolldatei hat einen Datei-Datumsstempel, daher mache ich mir Sorgen, dass ich Protokolldateien habe, die Monate alt im Verzeichnis sind. – Sun

9

finden Sie können diese schnell verwalten und hoch mantainable nur um Ihre eigenen Appender zu schaffen.

Erstellen Sie einfach eine Klasse wie folgt aus:

import java.text.SimpleDateFormat; 
    import java.util.Date; 
    import org.apache.log4j.FileAppender; 

    public class CustomFileAppender extends FileAppender{ 

    @Override 
    public void setFile(String fileName) 
    { 
     if (fileName.indexOf("%timestamp") >= 0) { 
      Date d = new Date(); 
      SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS"); 
      fileName = fileName.replaceAll("%timestamp", format.format(d)); 
     } 
     super.setFile(fileName); 
    } 
} 

und legen Sie diese in Ihre Eigenschaften:

log4j.appender.file=com.portima.filenet.brio.ops.tools.CustomFileAppender 
    log4j.appender.file.File=${log}/general.%timestamp.log 

Jetzt können Sie jede Art von Dateinamen geben Sie wollen.