2015-10-20 46 views
5

(FYI już przeszukiwane się wiele dokumentów w Internecie. Używam Storm-0.10.0-beta1. Plik konfiguracyjny log4j2 w Storm jest worker.xml)Jak usunąć stare dzienniki z log4j2

Teraz Próbuję użyć log4j2.

Szukam sposobu usuwania starych dzienników, ale nie mogę się dowiedzieć. Część konfiguracji jest jak poniżej.

<RollingFile name="SERVICE_APPENDER" 
      fileName="${sys:storm.home}/logs/${sys:logfile.name}.service" 
      filePattern="${sys:storm.home}/logs/${sys:logfile.name}.service.%d{yyyyMMdd}"> 
     <PatternLayout> 
      <pattern>${pattern}</pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
     </Policies> 
     <DefaultRolloverStrategy max="9"/> 
    </RollingFile> 

Najpierw oczekiwałem, że pliki dzienników starszych niż 3 dni zostaną usunięte.

Ale tak naprawdę nie jest.

Zastanawiam się, czy istnieje sposób usuwania starych dzienników, czy też nie.

Jeśli istnieje sposób, którego jeszcze nie złapałem, powiadom mnie.

+0

Czy kiedykolwiek próbowałeś co się dzieje? O ile pamiętam, log4j już usunął nieaktualne pliki, więc zakładam, że również log4j2 będzie. Po prostu ustaw swoją strategię rolowania na 2 i zmień datę systemową, aby spróbować ... – Marged

+0

@Marged Dziękuję za twoje komentarze. Nawet jeśli obecny projekt pokazuje, że nie działa, spróbuję ponownie. – obanadingyo

Odpowiedz

1

można znaleźć więcej informacji tła w tego wpisu JIRA dla log4j:

https://issues.apache.org/jira/browse/LOG4J2-524

Wydaje się zdarzyć, że auto usuwania starych plików dziennika nie działa, jeśli tylko używać TimeBasedTriggeringPolicy

+0

Dziękujemy za udostępnienie linku. W końcu dowiedziałem się, że nie ma sposobu, aby usunąć stare dzienniki czasowe do tej pory. Zgodnie z ostatnim komentarzem pod tym linkiem (https://issues.apache.org/jira/browse/LOG4J2-435), zadania tworzenia usuwania starych dzienników opartych na czasie są w toku.Dlatego zdecydowałem się użyć strategii rolowania opartej na wielkości przy użyciu indeksu,% i, – obanadingyo

4

Od 2.5 Log4j obsługuje custom Delete action, który jest wykonywany na każdym przejściu.

Można kontrolować, które pliki są usuwane za pomocą dowolnej kombinacji:

  1. Nazwa (Dopasowywanie glob lub regex)
  2. Age ("delete jeśli 14 dni lub starszych")
  3. Hrabia („zachować tylko najnowszą 3”)
  4. Rozmiar („zachować tylko najnowsze pliki do 500 MB”)

Użytkownicy, którzy potrzebują jeszcze dokładniejszej kontroli nad plikami do usunięcia, mogą określić warunek skryptu przy użyciu dowolnego obsługiwanego języka skryptowego JSR-223.

Proszę sprawdzić documentation, ma trzy pełne przykłady, które mogą być przydatne.

za pytanie, ten fragment powinien działać:

<DefaultRolloverStrategy> 
    <!-- 
     * only files in the log folder, no sub folders 
     * only rolled over log files (name match) 
     * only files that are 4 days old or older 
    --> 
    <Delete basePath="${sys:storm.home}/logs/" maxDepth="1"> 
     <IfFileName glob="*.service.????????" /> 
     <IfLastModified age="4d" /> 
    </Delete> 
    </DefaultRolloverStrategy> 

Wreszcie, należy uważać! W ten sposób nie można odzyskać plików usuniętych. :-)

+0

Czy istnieje opcja osiągnięcia tego poprzez wersję Log4j2 2.3? – pna

+1

Nie, obawiam się, że nie. Akcja Delete została dodana w 2.5 ... Możesz zaproponować poprawkę backport (najlepiej dostarczyć łatkę z testami jednostkowymi), ale nie będzie to prosty port, ponieważ implementacja Delete korzysta z Java 7 Path API mocno ... –