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