Как настроить log4j, чтобы хранить только файлы журнала за последние семь дней? - PullRequest
53 голосов
/ 10 сентября 2010

У меня следующая проблема с журналированием в нескольких Java-приложениях, использующих log4j для ведения журнала:

Я хочу, чтобы файлы журналов менялись ежедневно, например

log.2010-09-10
log.2010-09-09
log.2010-09-08
log.2010-09-07
log.2010-09-06
log.2010-09-05
log.2010-09-04

Но по соображениям безопасности данных нам не разрешается хранить файлы журналов в моей компании более семи дней. Таким образом, создание следующего следующего файла журнала log.2010-09-11 должно вызвать удаление log.2010-09-04. Можно ли настроить такое поведение с log4j? Если нет, знаете ли вы другое элегантное решение для такой проблемы с журналированием?

Ответы [ 13 ]

55 голосов
/ 10 сентября 2010

Я полагаю, вы используете RollingFileAppender?В этом случае у него есть свойство с именем MaxBackupIndex, которое можно установить для ограничения количества файлов.Например:

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=7
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
25 голосов
/ 10 сентября 2010

Вы можете выполнять свою домашнюю работу в отдельном сценарии, который можно выполнять ежедневно. Примерно так:

find /path/to/logs -type f -mtime +7 -exec rm -f {} \;
15 голосов
/ 10 сентября 2010

Согласно следующему посту, вы не можете сделать это с log4j: Использовать MaxBackupIndex в DailyRollingFileAppender -log4j

Насколько я знаю, эта функциональность должна была сделать это вlog4j 2.0 но эти усилия отвлеклись.Согласно веб-сайту logback, logback является предполагаемым наследником log4j, поэтому вы можете рассмотреть возможность его использования.

Существует API, называемый SLF4J, который предоставляет общий API для ведения журнала.Он загрузит фактическую реализацию ведения журнала во время выполнения, поэтому в зависимости от предоставленной вами конфигурации он может использовать java.util.log или log4j или logback или любую другую библиотеку, способную предоставить средства ведения журнала.Перед непосредственным использованием log4j для использования SLF4J придется проделать небольшую предварительную работу, но они предоставляют некоторые инструменты для автоматизации этого процесса.После того, как вы преобразовали свой код для использования SLF4J, переключение бэкэндов журналов должно быть просто изменением файла конфигурации.

6 голосов
/ 01 марта 2017

log2j теперь поддерживает удаление старых журналов. Посмотрите на тег DefaultRolloverStrategy и фрагмент ниже. Он создает до 10 архивов в один и тот же день, проанализирует каталог $ {baseDir}, который вы определили в теге Properties, на максимальной глубине 2 с именем файла журнала, соответствующим «app - *. Log.gz», и удалит журналы старше 7 лет. дней, но сохраняйте последние 5 журналов, если последние 5 журналов старше 7 дней.

  <DefaultRolloverStrategy max="10">
    <Delete basePath="${baseDir}" maxDepth="2">
      <IfFileName glob="*/app-*.log.gz">
        <IfLastModified age="7d">
          <IfAny>
            <IfAccumulatedFileCount exceeds="5" />
          </IfAny>
        </IfLastModified>
      </IfFileName>
    </Delete>
  </DefaultRolloverStrategy>
4 голосов
/ 10 сентября 2010

Есть также DailyRollingFileAppender;http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html

Редактировать: после прочтения этого тревожного утверждения

В DailyRollingFileAppender обнаружены проблемы с синхронизацией и потерей данных.Компонент log4j extras включает в себя альтернативы, которые следует учитывать для новых развертываний и которые обсуждаются в документации для org.apache.log4j.rolling.RollingFileAppender.

по указанному выше URL-адресу (чего я никогда не осознавал), тогда это выглядит как лучшая ставка;http://logging.apache.org/log4j/companions/extras/apidocs/index.html

3 голосов
/ 24 июня 2014

Я сталкивался с этим приложением здесь , которое делает то, что вы хотите, его можно настроить на сохранение определенного количества файлов, которые были пролонгированы по дате.

Загрузка: http://www.simonsite.org.uk/download.htm

Пример (отличный):

new TimeAndSizeRollingAppender(name: 'timeAndSizeRollingAppender',
   file: 'logs/app.log', datePattern: '.yyyy-MM-dd',
   maxRollFileCount: 7, compressionAlgorithm: 'GZ',
   compressionMinQueueSize: 2,
   layout: pattern(conversionPattern: "%d [%t] %-5p %c{2} %x - %m%n"))
3 голосов
/ 10 сентября 2010

Существует еще одна опция DailyRollingFileAppender .но в нем отсутствует функция автоматического удаления (ведение журнала за 7 дней), которую вы ищете

образец

log4j.appender.DRF=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRF.File=example.log
log4j.appender.DRF.DatePattern='.'yyyy-MM-dd

Я сталкиваюсь с чем-то вызывающим org.apache.log4j.CompositeRollingAppender , который сочетает в себе функции RollingFileAppender (maxSizeRollBackups, номер файла резервной копии) и DailyRollingFileAppender (по дням).

Но еще не пробовали, кажется, это не стандартная функция log4j ветки 1.2.

2 голосов
/ 22 марта 2016

Используйте настройку log4j.appender.FILE.RollingPolicy.FileNamePattern, например, log4j.appender.FILE.RollingPolicy.FileNamePattern=F:/logs/filename.log.%d{dd}.gz для ведения журналов за один месяц до пролонгации.

Я не ждал один месяц, чтобы проверить, но я попытался с мм (то есть минут) и подтвердилон перезаписывается, поэтому я предполагаю, что он будет работать для всех шаблонов.

1 голос
/ 10 сентября 2010

Если вы используете Linux, вы можете настроить задание cron с помощью tmpwatch.

Большинство систем Linux имеют задание cron tmpwatch, которое очищает каталог / tmp.Вы можете добавить еще один, который отслеживает ваш каталог журналов и удаляет файлы старше 7 дней.

Если вы используете другую систему, вероятно, есть эквивалентные утилиты.

0 голосов
/ 15 ноября 2017

Несмотря на запуск задания хронона, для этой задачи мы можем использовать файл log4j2.properties в папке config logstash. Посмотрите на ссылку ниже, это будет полезно.

https://github.com/elastic/logstash/issues/7482

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...