Rotasi harian Log4j dan retensi bulanan dengan appender file apa pun

11

Apakah mungkin dengan salah satu append log4j untuk menulis log dengan waktu rotasi dan batas retensi tertentu.
Tujuannya adalah:

  • untuk memiliki file log untuk setiap hari; buat file baru di tengah malam untuk log baru
  • untuk menyimpan file log dan menghapusnya secara otomatis setelah waktu tertentu; jadi hapus file log yang lebih lama dari X hari (mis. 30 hari)

Tampaknya rotasi dimungkinkan tetapi batas waktu retensi tidak dimungkinkan dengan log4j

Versi log4j adalah 1.2.

PaulEdison
sumber

Jawaban:

4

properti log4J ini berfungsi untuk saya

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

Jawaban saya berdasarkan logback, bukan log4j(maaf atas kebingungan ..)


Anda dapat mencapai rotasi log itu dengan menggunakan TimeBasedRollingPolicy.

sebagai contoh)

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

Ini akan diputar pada tengah malam, dan akan menghapus file log yang lebih lama dari 30 hari.

fileNamePattern: Periode rollover disimpulkan dari nilai fileNamePattern

maxHistory: Properti maxHistory opsional mengontrol jumlah maksimum file arsip yang akan disimpan, secara tidak sinkron menghapus file yang lebih lama. Misalnya, jika Anda menetapkan rollover bulanan, dan mengatur maxHistory ke 6, maka file arsip senilai 6 bulan akan disimpan dengan file yang lebih lama dari 6 bulan dihapus. Catatan sebagai file log arsip lama dihapus, folder apa pun yang dibuat untuk tujuan pengarsipan file log akan dihapus sebagaimana mestinya.

Anda dapat memeriksa informasi lebih lanjut tentang TimeBasedRollingPolicy

tonarimochi
sumber
@PaulEdison Hanya ingin tahu, Apakah konfigurasi ini tidak berfungsi?
javaGroup456
1
Solusi ini didasarkan pada logback bukan log4j
benbenw
Wow .... @benbenw benar !! Saya tidak mengerti mengapa saya salah memahami pertanyaan ini sebagai logback ..... Terima kasih telah mengingatkan saya. Silakan lihat jawabannya untuk log4j.
tonarimochi
3

ya kita bisa!

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

untuk info lebih lanjut lihat dokumentasi: TimeBasedRollingPolicy

JavaDoc : TimeBasedRollingPolicy

Aymen
sumber
1

Sebagian besar jawaban didasarkan pada logback. Tetapi pertanyaannya adalah tentang log4j 1.2 (lama ...)

jawaban yang menyebutkan DailyRollingFileAppender tidak akan berfungsi baik. org.apache.log4j.DailyRollingFileAppendertidak mendukung MaxBackupIndexproperti, lihat http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (ini untuk RollingFileAppender)

Anda mungkin tertarik pada: Gunakan MaxBackupIndex di DailyRollingFileAppender -log4j

dan untuk kemungkinan jawaban: Log4j Rollingpolicy dan MaxbackupIndex

Tetapi Anda mungkin harus menggunakan slf4j log4j "emulation" ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) dan rutekan log Anda melalui logback (tanpa perubahan kode) di mana jauh lebih mudah untuk mengimplementasikan .

benbenw
sumber