Herhangi bir dosya ekleyicisi ile günlük rotasyon ve aylık saklama


11

Log4j uygulayıcılarının herhangi biriyle günlükleri belirli bir dönme süresi ve alıkoyma sınırıyla yazmak mümkün müdür?
Amaç:

  • her gün için bir günlük dosyasına sahip olmak; yeni günlükler için gece yarısı yeni bir dosya oluştur
  • günlük dosyalarını tutmak ve belirli bir süre sonra otomatik olarak silmek; bu nedenle X günden eski günlük dosyalarını silin (örneğin 30 gün)

Rotasyon mümkün görünüyor, ancak tutma süresi sınırı log4j ile mümkün değil

Log4j sürümü 1.2'dir.

Yanıtlar:


4

bu log4J özellikleri benim için çalışıyor

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

Cevabım dayanıyor logback, değil log4j(karışıklık için üzgünüm ..)


Bu günlük rotasyonunu kullanarak yapabilirsiniz TimeBasedRollingPolicy.

Örneğin)

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

Gece yarısı dönecek ve 30 günden daha eski günlük dosyalarını silecektir.

fileNamePattern: Rollover süresi fileNamePattern değerinden çıkarılır

maxHistory: İsteğe bağlı maxHistory özelliği, eski dosyaları eşzamansız olarak silerek saklanacak maksimum arşiv dosyası sayısını denetler. Örneğin, aylık bir rollover belirtirseniz ve maxHistory değerini 6 olarak ayarlarsanız, 6 aydan eski dosyalar silindiğinde 6 aylık arşiv dosyaları saklanır. Eski arşivlenen günlük dosyaları kaldırıldıkça, günlük dosyası arşivleme amacıyla oluşturulan tüm klasörlerin uygun şekilde kaldırılacağını unutmayın.

TimeBasedRollingPolicy hakkında daha fazla bilgi kontrol edebilirsiniz


@PaulEdison Sadece merak ediyorum, Bu yapılandırma çalışmıyor mu?
javaGroup456

1
Bu çözüm log4j değil logback'e dayanmaktadır
benbenw

Vay be .... @benbenw doğru !! Bu soruyu neden geri dönüş olarak yanlış anladığımı anlamıyorum ..... Hatırlattığınız için teşekkür ederim. Lütfen log4j için cevabına bakınız.
tonarimochi

3

Evet yapabiliriz!

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

daha fazla bilgi için belgelere bakın: TimeBasedRollingPolicy

JavaDoc: TimeBasedRollingPolicy


1

Cevapların çoğu geri dönüşe dayanmaktadır. Ama soru log4j 1.2 hakkında (eski ...)

DailyRollingFileAppender'dan bahseden yanıt da çalışmaz. mülkü org.apache.log4j.DailyRollingFileAppenderdesteklemiyor MaxBackupIndexbkz. http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (bunun için RollingFileAppender)

ilginizi çekebilir: DailyRollingFileAppender -log4j içinde MaxBackupIndex kullanma

ve olası bir cevap için: Log4j Rollingpolicy ve MaxbackupIndex

Ancak muhtemelen slf4j log4j "öykünmesini" ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) kullanmanız ve günlüğünüzü, uygulamanın çok daha kolay olduğu logback yoluyla yönlendirmeniz gerekir (herhangi bir kod değişikliği olmadan) .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.