2010-07-25 12 views
34

Czy można kompresować pliki dziennika (robię to za pośrednictwem RollingFileAppender)?Kompresuj pliki Log4j

+0

Co masz na myśli mówiąc "compres"? Uproszczać? Czy naprawdę kompresujesz, który musisz rozpakować? –

+0

Kompresuj (na przykład spakowany) do archiwum –

Odpowiedz

37

log4j extras że posiada wsparcie dla:

tylko dodać następujące konfiguracji RollingFileAppender i mający koniec pliku w .gz automagicznie kompresji logi:

<appender...> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="/wombat/foo.%d{yyyy-MM}.gz"/> 
    </rollingPolicy> 
</appender> 

Poniżej przedstawiono niektóre szczegóły w javadoc:

http://logging.apache.org/log4j/companions/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html

mam nadzieję, że pomogłem

+11

Jak mogę dodać go do pliku właściwości? > 'log4j.appender.DefaultLog = org.apache.log4j.RollingFileAppender log4j.appender.DefaultLog.File = $ {mailbox.root}/logs/application.log log4j.appender.DefaultLog.MaxFileSize = 50MB log4j.appender .DefaultLog.MaxBackupIndex = 100 log4j.appender.DefaultLog.layout = org.apache.log4j.PatternLayout log4j.appender.DefaultLog.layout.ConversionPattern =% d% p [% c] -% m% n' – MiKu

+1

czym są ** dla? – imdhmd

+0

W ten sposób można określić symbol wieloznaczny w Javie, aby uwzględnić katalogi, w przeciwieństwie do '*', które dotyczy tylko plików. – hd1

2

Wiem, że to nie odpowiada dokładnie na twoje pytanie, ale proponuje alternatywne rozwiązanie.

Sposób, w jaki sobie z tym poradzimy polega na tym, że proces wsadowy jest uruchamiany pod koniec dnia, który kompresuje wcześniejsze pliki dziennika do dzisiejszej daty, pozbywając się wcześniejszych niż jeden tydzień, a następnie kopiuje je do innego serwera plików . W ten sposób aplikacja nie musi zużywać żadnych cykli procesora, wykonując to, a na serwerze mamy dzienniki, które nie są starsze niż tydzień, a na innym serwerze plików mamy starsze pliki dziennika.

1

Jedyne co widzę jest uaktualnienie log4j ponad 1.3.15/1.4 i użyć wałka TimeBasedRollingPolicy mieć włączoną automatyczną kompresję, ale to wymagałoby modernizacji log4j zasadniczo (i zgodność aplikacji, jak również)

Hmmm ... może być jeszcze lepiej mieć zezwolenie na wykonanie polecenia log4j po zakończeniu pliku. Więc zamiast gzip, mogę użyć innej logiki kompresji, jak bzip lub lzop itd. To byłoby inne podejście, jeśli mam ten obiekt w log4j dzisiaj.

16

Natknąłem się na tę wspaniałą odpowiedź, ale potem kontynuowałem śledztwo, a log4j 2 wyszedł!

Teraz możesz kompresować z podstawową biblioteką i wiele, wiele więcej ... jest po prostu niesamowita!

RollingFileAppender - Szukałem czegoś, co miało zarówno opaskę na czas, jak i na rozmiar. Z kompresją ... ma obie! i mogę upuścić moją bibliotekę syslog4j, ponieważ ta ma ją również!

Proszę nie używać log4j 1.2 + dodatków, chyba że naprawdę musisz.

+0

Zgadzam się. Wspaniale jest, że mamy teraz standard w log4j 2, ale od czasu tego komentarza log4j 2 jest w wersji beta.Nadal zachęcam każdego, kto może, skorzystaj z wersji beta i pomóż mu ją ulepszyć przed jej wydaniem. –

+0

Tak, beta miała się skończyć w czerwcu, ale wciąż trwa ... szkoda. Udało mi się to dobrze, ale polityka nie dyktuje kodu beta w produkcji. – Daren