Log4j codzienna rotacja i miesięczne przechowywanie w dowolnym programie dołączającym pliki

11

Czy jest możliwe, aby którykolwiek z dołączających log4j zapisywał dzienniki z określonym czasem rotacji i limitem przechowywania.
Celem będzie:

  • mieć plik dziennika na każdy dzień; utwórz nowy plik o północy dla nowych dzienników
  • przechowywać pliki dziennika i automatycznie usuwać je po pewnym czasie; więc usuń pliki dziennika starsze niż X dni (np. 30 dni)

Wydaje się, że obrót jest możliwy, ale ograniczenie czasu retencji nie jest możliwe w przypadku log4j

Wersja log4j to 1.2.

PaulEdison
źródło

Odpowiedzi:

4

te właściwości log4J działają dla mnie

log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/opt/cronjob/logs/cronlogs.log
log4j.appender.file.MaxFileSize=1028MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Basharat Ali
źródło
4

Moja odpowiedź jest oparta na logback, nie log4j(przepraszam za zamieszanie ...)


Możesz osiągnąć ten obrót dziennika za pomocą TimeBasedRollingPolicy.

na przykład)

<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>./logs/system.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>./logs/system.log.%d{yyyy-MM-dd}</fileNamePattern>
    <!-- keep last 30 days of logs -->
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <charset>UTF-8</charset>
      <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n</Pattern>
  </encoder>
</appender>

Obróci się o północy i usunie pliki dziennika starsze niż 30 dni.

fileNamePattern: okres najazdu wywnioskowano z wartości fileNamePattern

maxHistory: Opcjonalna właściwość maxHistory kontroluje maksymalną liczbę przechowywanych plików archiwum, usuwając asynchronicznie starsze pliki. Na przykład, jeśli określisz miesięczne przejście i ustawisz maxHistory na 6, wówczas pliki archiwów o wartości 6 miesięcy zostaną zachowane, a pliki starsze niż 6 miesięcy zostaną usunięte. Uwaga: po usunięciu starych zarchiwizowanych plików dziennika wszelkie foldery utworzone w celu archiwizacji plików dziennika zostaną odpowiednio usunięte.

Możesz sprawdzić więcej informacji na temat TimeBasedRollingPolicy

tonarimochi
źródło
@PaulEdison Ciekawe, czy te konfiguracje nie działają?
javaGroup456
1
To rozwiązanie opiera się na logback, a nie log4j
benbenw
Wow .... @benbenw jest poprawne !! Nie rozumiem, dlaczego źle zrozumiałem to pytanie jako logback ... Dziękuję za przypomnienie. Proszę odnieść się do jego / jej odpowiedzi na log4j.
tonarimochi
3

tak możemy!

plik: project->src->main->resources->logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>folderName/logFile.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>folderName/archive/logFile.%d{dd-MM-yyyy}.log</fileNamePattern>
      <!-- keep last 30 days of logs -->
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <!-- filter by level (optional) -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
    </filter>

    <encoder>
      <pattern>%date %-5level [%thread] %file:%L [%M] - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- you can filter by type of level (optional) -->
  <root level="DEBUG">
    <appender-ref ref="FILE"/>
  </root>
</configuration>

Aby uzyskać więcej informacji, zobacz dokumentację: TimeBasedRollingPolicy

JavaDoc: TimeBasedRollingPolicy

Aymen
źródło
1

Większość odpowiedzi opiera się na logback. Ale pytanie dotyczy log4j 1.2 (stary ...)

odpowiedź mówiąca o DailyRollingFileAppender również nie będzie działać. org.apache.log4j.DailyRollingFileAppendernie obsługuje tej MaxBackupIndexwłaściwości patrz http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (dotyczy RollingFileAppender)

możesz być zainteresowany: Użyj MaxBackupIndex w DailyRollingFileAppender -log4j

i dla możliwej odpowiedzi: Log4j Rollingpolicy i MaxbackupIndex

Ale prawdopodobnie powinieneś użyć „emulacji” slf4j log4j ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) i przekierować swój dziennik przez logback (bez zmiany kodu), gdzie jest znacznie łatwiej zaimplementować .

benbenw
źródło