25 Haziran 2021 Cuma

Logback logback.xml RollingFileAppender Tanımlama

Giriş
Appender altında şu tag'ler kullanılır
file
filter 
rollingPolicy
encoder

file Tag
filename değerini atamakta fayda var. Böylece en yeni dosyanın ismi her zaman bellidir.

rollingPolicy Tag
TimeBasedRollingPolicy, SizeAndTimeBasedRollingPolicy, FixedWindowRollingPolicy olabilir.

TimeBasedRollingPolicy Tag
Her gün yeni bir dosyaya geçilebilir. 
Şu alanlar belirtilir.

fileNamePattern
timeBasedFileNamingAndTriggeringPolicy : maxFileSize
maxHistory : Kaç tane dosya saklanacağını değil, dosyaların kaç birim süre boyunca saklanacağını belirtir.
totalSizeCap : Açıklaması şöyle
The optional totalSizeCap property controls the total size of all archive files.
Örnek
Şöyle yaparız
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <fileNamePattern>/logs/api-%d{yyyy-MM-dd}.%i.log.json.gz
  </fileNamePattern>
  <timeBasedFileNamingAndTriggeringPolicy 
    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

    <maxFileSize>10MB</maxFileSize>
  </timeBasedFileNamingAndTriggeringPolicy>
  <maxHistory>10</maxHistory> <!-- 10 gün sakla -->

</rollingPolicy>
Açıklaması şöyle
When using a TimeBasedRollingPolicy in Logback, it seems to be fairly common that it doesn’t operate as expected. One setting in particular seems to be a bit misleading — maxHistory
Örnek
Şöyle yaparız.
<appender name="ROOT_ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${LOG_HOME}/main-error.log</file>
  <filter class="logging.LogbackCustomFilter"/>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!-- daily rollover -->
    <fileNamePattern>${LOG_HOME}/main-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
       <!-- or whenever the file size reaches 1GB -->
      <maxFileSize>1GB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <!-- keep 7 days' worth of history -->
    <maxHistory>7</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%date %-5level [%thread] - [%logger] - %msg%n</pattern>
  </encoder>
</appender>
SizeAndTimeBasedRollingPolicy Tag
Her gün yeni bir dosyaya geçilebilir veya dosya büyüklüğü belli bir sınırı aşınca yeni dosyaya geçilebilir.

Örnek - totalSizeCap
İstenirse geçmişse ait belli bir gün kadar dosya ve en fazla belli bir toplam değer kadar disk alanı kullanır.  Burada önemli bir nokta var. Temizlenecek dosyalar fileNamePattern'a göre aranıyor. Yani fileNamePattern bir regex olarak kullanılıyor. Eğer fileNamePattern kendi içinde timestamp gibi bir şey kullanıyorsa temizleme gerçekleşmez. Elimizde şöyle bir xml olsun. Burada fileNamePattern içinde uzantıdan önce timestamp var. Dolayısıyla temizleme olmuyor
<configuration ...>
  <timestamp key="timestamp" datePattern="HH.mm,ss"/>
  ...
  <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>log/foo.log</file>
    <encoder>
      <pattern>%date{yyyMMdd HH:mm:ss.SSS} -%-32([%thread]) %-5level %-36logger{20}
%-30(\(%file:%line\)) - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <fileNamePattern>log/foo-%d{yyy-MM-dd} (run at $(timestamp}).%i.log</fileNamePatter>
      ...
    </rollingPolicy
  </appender>
...
</configuration>
Şöyle yaparız
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>mylog.txt</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <!-- rollover daily -->
    <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file is at most 100MB, keep 60 days worth of history,but at most 20GB -->
    <maxFileSize>100MB</maxFileSize>    
    <maxHistory>60</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
  </rollingPolicy>
  <encoder>
    <pattern>%msg%n</pattern>
  </encoder>
</appender>
Eğer uygulama açılırken eski dosyaları silsin istiyorsak cleanHistoryOnStart kullanılır. Şöyle yaparız.
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <!-- rollover daily -->
    <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file is at most 100MB, keep 60 days worth of history,but at most 20GB -->
    <maxFileSize>100MB</maxFileSize>    
    <maxHistory>60</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
  <cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
FixedWindowRollingPolicy Tag
Sadece belli sayıda log dosyası saklar. Saklanacak dosya sayısı minIndex ve maxIndex ile belirtilir.
Örnek
Şöyle yaparız.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>logs/touchpoint.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    <fileNamePattern>logs/touchpoint.%i.log.zip</fileNamePattern>
    <minIndex>1</minIndex>
    <maxIndex>3</maxIndex>
  </rollingPolicy>

  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <maxFileSize>10MB</maxFileSize>
  </triggeringPolicy>
  <encoder>
    ...
  </encoder>
</appender>

Hiç yorum yok:

Yorum Gönder