Ежедневная ротация и ежемесячное хранение Log4j с любым приложением для файлов

Возможно ли с помощью какого-либо из приложений log4j записывать журналы с определенным временем ротации и лимитом хранения.
Цель будет:

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

Кажется, что вращение возможно, но ограничение времени удерживания невозможно с log4j

Версия log4j - 1.2.


person PaulEdison    schedule 12.10.2019    source источник


Ответы (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
person Basharat Ali    schedule 15.10.2019

Мой ответ основан на 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.

person 16777215    schedule 15.10.2019
comment
@PaulEdison Просто любопытно, эта конфигурация не работает? - person javaGroup456; 21.10.2019
comment
Это решение основано на входе в систему, а не на log4j - person benbenw; 22.10.2019
comment
Вау .... @benbenw правильный !! Я не понимаю, почему я неправильно понял этот вопрос как логбэк ..... Спасибо, что напомнили мне. Пожалуйста, обратитесь к его / ее ответу для log4j. - person 16777215; 23.10.2019

да мы можем!

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

person Aymen    schedule 16.10.2019

Большинство ответов основано на логбэке. Но вопрос про 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

Но вам, вероятно, следует использовать "эмуляцию" slf4j log4j (http://www.slf4j.org/legacy.html#log4j-over-slf4j) и направьте свой журнал через логбэк (без каких-либо изменений кода), где это намного проще реализовать.

person benbenw    schedule 21.10.2019