2011-01-14 3 views
6

Attualmente sto usando la classe DailyRollingFileAppender in log4j di file di registro giornaliero aggiungendo, ma voglio avere i file di log separati nel seguente formato:Come si creano i file di registro in log4j per l'esecuzione del programma?

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

Questo dovrebbe essere fatto una volta per l'esecuzione del programma così finisco con qualcosa come ...

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> 

Dove possono essere raggruppati insieme file di registro di ambienti diversi.

Esiste comunque la possibilità di farlo senza estendere la classe FileAppender? Almeno, c'è un modo per farlo:

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

Grazie

Edit: Sono già usando DailyRollingFileAppender per ottenere qualcosa di simile DATA.log.2011-01-13. Quello che voglio sapere come fare è ottenere il file di log da rollover dopo l'esecuzione di ogni programma (o prima dell'esecuzione di ogni programma) e aggiungere una stringa numerica casuale alla fine.

+0

Relevant: http://en.wikipedia.org/wiki/Aspetto-programmato_programma –

+0

Grazie Dave. Un'altra domanda, sto cercando di aggiungere una proprietà alla mia classe, ad esempio log4j.appender.DATA.CustomProperty = value. Come faccio a fare questo? – Kevin

+0

Nevermind ... è facile, non l'ho mai capitalizzato:/ – Kevin

risposta

3

un'occhiata a: Setting a log file name to include current date in Log4j

EDIT: Aggiungi questa classe per il vostro progetto, e usarlo come appender:

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); 
    } 
} 

Poi basta impostare il nome del file del tuo appender a qualcosa come:. Filename% rnd.log

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

Sto già facendo quello che dice l'URL che hai postato. Quello che voglio fare è aggiungere una stringa casuale aggiuntiva alla fine dopo l'esecuzione di ciascun programma in modo che possa tenere traccia di più log. Modificherò la mia domanda per questo. – Kevin

+0

Ok, ci sto lavorando;). Ce l'ho da qualche parte – Twister

+0

E puoi aggiungere facilmente anche altri nuovi modelli. E noi attraverso diversi progetti – Twister

1

Nel codice impostare una nuova proprietà ambiente:

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

Quindi, nel file log4j utilizzare tale variabile utilizzando ${randomString}.

Spero che aiuti.