Щоденне обертання Log4j та щомісячне збереження з будь-яким додатком файлу


11

Чи можливо з будь-яким із додавачів log4j писати журнали з певним часом обертання та обмеженням збереження.
Метою буде:

  • мати файл журналу на кожен день; створити новий файл опівночі для нових журналів
  • зберігати файли журналів та автоматично видаляти їх через певний час; тому видаліть файли журналу старші X днів (наприклад, 30 днів)

Здається, що обертання можливе, але обмеження часу утримування неможливо з log4j

Версія log4j - 1,2.

Відповіді:


4

ця властивість log4J працює для мене

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

4

Моя відповідь заснована на logback, не log4j(вибачте за плутанину ..)


Ви можете досягти цього обертання журналу, використовуючи TimeBasedRollingPolicy.

наприклад)

<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>

Він обертається опівночі та видаляє файли журналів, старші 30 днів.

fileNamePattern: Період перекидання визначається зі значення fileNamePattern

maxHistory: Необов'язкове властивість maxHistory контролює максимальну кількість архівних файлів, що зберігаються, асинхронно видаляючи старі файли. Наприклад, якщо ви вкажете щомісячний перекидання та встановите maxHistory 6, тоді файли архівів вартістю 6 місяців зберігатимуться з видаленими файлами, старшими 6 місяців. Зауважте, що коли старі архівовані файли журналів видаляються, усі папки, створені для архівації файлів журналу, будуть видалені у відповідних випадках.

Ви можете перевірити більше інформації про TimeBasedRollingPolicy


@PaulEdison Просто цікаво, чи не працюють ці конфігурації?
javaGroup456

1
Це рішення засноване на зворотній зв'язок не log4j
benbenw

Нічого .... @ benbenw правильно !! Я не розумію, чому я неправильно зрозумів це питання як зворотній зв'язок ..... Дякую, що нагадали мені. Будь ласка, зверніться до його / її відповіді для log4j.
tonarimochi

3

так, ми можемо!

файл: 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>

Для отримання додаткової інформації див документацію: TimeBasedRollingPolicy

JavaDoc: TimeBasedRollingPolicy


1

Більшість відповідей ґрунтуються на зворотньому зв’язку. Але питання про log4j 1.2 (старий ...)

відповідь, що згадує DailyRollingFileAppender, також не буде працювати. org.apache.log4j.DailyRollingFileAppenderне підтримує MaxBackupIndexвластивість, див. http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (це для RollingFileAppender)

вас може зацікавити: Використовуйте MaxBackupIndex в DailyRollingFileAppender -log4j

і для можливої ​​відповіді: Log4j Rollingpolicy та MaxbackupIndex

Але вам, мабуть, варто скористатися smu4j "emulation" slf4j log4j ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) і прокласти маршрут через журнал (без зміни коду), де це набагато простіше реалізувати .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.