2011-01-14 5 views
6

Ich bin derzeit mit der DailyRollingFileAppender Klasse in log4j Anhängen tägliche Protokolldatei zu tun, aber ich mag die Protokolldateien in folgendem Format getrennt haben:Wie erstellen Sie Log-Dateien in log4j pro Programmausführung?

DATA.log.<date>_<time>_<random_#> 

Diese einmal pro Programmausführung getan werden sollte, so dass ich am Ende mit etwas wie ...

DATA.log.2011-01-13_12-46-38_<26> 
DATA.log.2011-01-13_12-46-38_<79> 
DATA.log.2011-01-13_12-46-38_<590> 

Wo verschiedene Protokolldateien aus verschiedenen Umgebungen zusammen gepoolt werden können.

Gibt es das überhaupt, ohne die FileAppender-Klasse zu erweitern? Zumindest ist es eine Möglichkeit zu tun:

DATA.log.<date>_<time>_<sequential_#>.log 

Dank

Edit: Ich bin schon DailyRollingFileAppender mit so etwas wie DATA.log.2011-01-13 zu bekommen. Ich möchte wissen, wie man die Protokolldatei nach jeder Programmausführung (oder vor jeder Programmausführung) zum Rollover bringt und am Ende eine zufällige numerische Zeichenkette hinzufügt.

+0

Relevant: http://en.wikipedia.org/wiki/Aspekt-orientierte_programmierung –

+0

Danke Dave. Eine weitere Frage: Ich versuche, meiner Klasse eine Eigenschaft hinzuzufügen, also log4j.appender.DATA.CustomProperty = value. Wie mache ich das? – Kevin

+0

Nevermind ... es ist einfach, ich habe es einfach nicht groß geschrieben:/ – Kevin

Antwort

3

haben einen Blick auf: Setting a log file name to include current date in Log4j

EDIT: diese Klasse zu einem Projekt hinzufügen, und es als appender verwenden:

import java.util.Random; 

import org.apache.log4j.DailyRollingFileAppender; 

public class MyAppender extends DailyRollingFileAppender {  
    @Override 
    public void setFile(String fileName) { 
     if (fileName.indexOf("%rnd") >= 0) { 
      Random r = new Random(); 
      fileName = fileName.replaceAll("%rnd", Integer.toString(r.nextInt())); 
     } 
     super.setFile(fileName); 
    } 
} 

Dann einfach Ihre appender der Dateinamen auf etwas gesetzt wie:. Filename% rnd.log

log4j.appender.R=MyAppender.MyAppender 
log4j.appender.R.File=.\\test.%rnd.log 
+0

Ich mache bereits, was die URL, die Sie gepostet haben, zu tun sagt. Ich möchte nach jeder Programmausführung am Ende eine zusätzliche zufällige Zeichenfolge hinzufügen, damit ich mehrere Protokolle verfolgen kann. Ich werde meine Frage dafür bearbeiten. – Kevin

+0

Ok, arbeite daran;). Ich habe es irgendwo – Twister

+0

Und Sie können auch andere neue Muster leicht hinzufügen. Und wir über mehrere Projekte hinweg – Twister

1

In Ihrem Code eine neue Umgebung Eigenschaft:

randomString = Long.toString(Math.abs((new Random()).nextLong()), Character.MAX_RADIX); 
System.setProperty("randomString", randomString); 

Verwenden Sie dann in Ihrer log4j-Datei diese Variable mit ${randomString}.

Ich hoffe, es hilft.

Verwandte Themen