2009-11-10 13 views
18

Używam Log4j z RollingFileAppender, aby utworzyć rotację dziennika na podstawie rozmiaru.Jak obrócić pliki dziennika na podstawie czasu zamiast rozmiaru w Log4j?

Jak mogę go skonfigurować, aby logował się do każdego pliku przez określoną liczbę czasu przed obróceniem?

Na przykład, aby każdy plik dziennika zawierał jedną godzinę dzienników, obracając się u góry każdej godziny?

skonfigurować Log4j programowo w Javie za pomocą Properties obiektu (w przeciwieństwie do pliku log4j.properties)

Odpowiedz

30

Prawdopodobnie chcesz użyć numeru DailyRollingFileAppender. Aby wyświetlać je co godzinę, możesz użyć elementu DatePattern z '.'yyyy-MM-dd-HH. Dla pliku log4j.properties:

log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH 
... 

lub do swojej programowej konfiguracji:

DailyRollingFileAppender appender = new DailyRollingFileAppender(); 
appender.setDatePattern("'.'yyyy-MM-dd-HH"); 

Logger root = Logger.getRootLogger(); 
root.addAppender(appender); 

Niestety, stosując DailyRollingFileAppender oznacza, że ​​nie można ograniczyć rozmiar pliku - może to być problematyczne, jeśli masz ton dzienników w danym okresie walcowanym.

+0

Ale nie są potencjalne problemy gwintów? Słyszałem o przypadkach, w których nie przewróci się, jeśli inne wątki są rejestrowane. – sproketboy

+0

DailyRollingFileAppender zaobserwowano problemy synchronizacji i utraty danych. Kompilator dodatków log4j zawiera alternatywy, które powinny być brane pod uwagę przy nowych wdrożeniach i które są omówione w dokumentacji dla org.apache.log4j.rolling.RollingFileAppender. – okwap

3

Kolejną rzeczą, na którą należy uważać przy każdym przekazywaniu pliku, jest upewnienie się, że tylko jedna maszyna JVM uzyskuje dostęp do określonego pliku dziennika naraz. Dzieje się tak dlatego, że log4j buforuje rozmiar pliku logu ze względu na wydajność, a twoje "przewijanie" stanie się niewyobrażalne, jeśli wiele maszyn JVM uzyska dostęp do tych samych plików.

+0

Przepraszam, co masz na myśli przez "vm"? – DivideByHero

+0

Mam na myśli wirtualną maszynę Java. Każde wystąpienie pliku wykonywalnego "java". –

0

Musisz użyć DailyRollingFileAppender. Pomimo swojej mylącej nazwy można ją skonfigurować tak, aby działała w konfigurowalnym czasie do minut.

3

Dodatkowo

log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender 
**log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH** 

Poniższa lista pokazuje wszystkie wzory date które zdefiniowane przez log4j,

Minutely '.'yyyy-MM-dd-HH-mm application.log.2013-02-28-13-54 
Hourly '.'yyyy-MM-dd-HH application.log.2013-02-28-13 
Half-daily '.'yyyy-MM-dd-a application.log.2013-02-28-AM app.log.2013-02-28-PM 
Daily '.'yyyy-MM-dd application.log.2013-02-28 
Weekly '.'yyyy-ww application.log.2013-07 app.log.2013-08 
Monthly '.'yyyy-MM application.log.2013-01 app.log.2013-02 
Powiązane problemy