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

11

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

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

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

Версия log4j - 1.2.

PaulEdison
источник

Ответы:

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

tonarimochi
источник
@PaulEdison Просто любопытно, эти настройки не работают?
javaGroup456
1
Это решение основано на logback, а не log4j
benbenw
Ух ты ... @benbenw это правильно !! Я не понимаю, почему я неправильно понял этот вопрос как logback ... Спасибо, что напомнили мне. Пожалуйста, обратитесь его / ее ответ для log4j.
тонаримочи
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

Aymen
источник
1

Большинство ответов основано на logback. Но вопрос о 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 ) и направлять ваш журнал через обратную запись (без каких-либо изменений кода), где это намного проще реализовать ,

benbenw
источник