2013-10-02 12 views
7

Jak skonfigurować log4j.properties, aby miał dokładnie jeden plik dziennika na uruchomienie aplikacji. Przeczytałem, że powinieneś używać znacznika czasu w nazwie pliku, ale to stworzy wiele plików na przebieg w miarę upływu czasu.Jeden plik dziennika na uruchomienie z log4j

Próbowałem DailyRollingFileAppender i RollingFileAppender, ale nie mogę znaleźć sposobu na skonfigurowanie tylko jednego dziennika na jeden przebieg. Dziennik nie powinien być podzielony na wiele dzienników i nie powinien być skracany, a pliki starych przebiegów powinny być zachowane.

Każda klasa ma statyczny org.slf4j.Logger za to własnym nazwiskiem Klasa:

private static final Logger log = LoggerFactory.getLogger(Foo.class); 

To jest moje obecne log4j.properties

log4j.rootLogger=error, RootAppender, RootErrorAppender 

#log4j.logger.com.example=info, qspaBackendAppender, stderr 
log4j.logger.com.example=info, qspaBackendAppender 
log4j.additivity.com.example=true 

#log4j.logger.com.example.util=trace, qspaBackendAppender, stderr 
#log4j.additivity.com.example.util=true 

log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log 
log4j.appender.qspaBackendAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.qspaBackendAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n 

log4j.appender.stderr=org.apache.log4j.ConsoleAppender 
log4j.appender.stderr.Target=System.err 
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout 
log4j.appender.stderr.layout.ConversionPattern=%-5p %c{1}:%L - %m%n 

log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.RootAppender.file=logs/root.log 
log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.RootAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n 

log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.RootErrorAppender.file=logs/rootError.log 
log4j.appender.RootErrorAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.RootErrorAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n 
log4j.appender.RootErrorAppender.threshold=error 

Odpowiedz

2

Połącz odpowiedź Udo Klimaschewski i odpowiedzi z to question, aby uzyskać pożądany wynik.

  1. dodać własność append = false
  2. dodać obiekt systemowy current.time i używać go w nazwie pliku
+0

Perfect! Dokładnie to, czego szukałem i dużo prostsze niż niestandardowy FileAppender w ten sposób: http://veerasundar.com/blog/2009/08/how-to-create-a-new-log-file-for-each-time- the-application-runs/Ale prawdopodobnie nie jest to bezpieczne dla równoczesnych egzekucji, ale to nie jest dla mnie problem – lilalinux

+2

"Odpowiedź Udo Klimaschewskiego" -> po prostu łączysz się z profilem użytkownika. Nie wiemy, do czego się odnosisz. –

10

miałem kłopotach pobieraniu który Udo Klimaschewski za odpowiedź Udy odnosił się więc umieścić tutaj moje rozwiązanie. log4j.properties:

# Root logger option 
log4j.rootLogger=INFO, fileout 

# Direct log messages to file 
log4j.appender.fileout=org.apache.log4j.FileAppender 
log4j.appender.fileout.File=/logs/myapp_${current.date}.log 
log4j.appender.fileout.ImmediateFlush=true 
log4j.appender.fileout.Threshold=debug 
log4j.appender.fileout.Append=false 
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout 
log4j.appender.fileout.layout.conversionPattern=%5p | %d | %m%n 

Następnie umieścić w głównej klasie tego bloku:

public class Starter { 
    static{ 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hhmmss"); 
     System.setProperty("current.date", dateFormat.format(new Date())); 
    } 
Powiązane problemy