Я использую SiftingAppender для создания разных файлов журналов для каждой службы (3 службы), TimeBasedRollingPolicy, SizeAndTimeBasedFNATP, поэтому перенос файлов журналов происходит каждый день, и он также будет запускаться, если размер файла журнала выходит за пределы (не учитывается вв логику удаления!?)
LogDiscriminator.java создает log_discriminator для политики SiftingAppender для обратного входа.Здесь два случая:
- Случай 1 (LogDiscriminator.java) - logback может удалять файлы журнала через 10 дней (maxHistory установлен на 10)
- Случай 2 (LogDiscriminator.java)- добавлен UUID (только для разграничения между экземплярами одной и той же службы - например, 2 экземпляра ser_1), logback не может удалить файлы журнала через 10 дней.
Пожалуйста, возможно ли удалить журналыстарше MaxHistory только по дате?Я имею в виду независимо от названия (случай 2).Есть ли другой способ добиться этого?Кроме того, почему maxFileSize не учитывается в логике удаления?И когда должна произойти чистка?Например при запуске это хорошо.
Logback
<?xml version="1.0"?>
<configuration>
<!-- ... -->
<appender name="MAIN" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>log_discriminator</key>
<defaultValue>LOG_FILE_KEY_UNKNOWN</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${log_discriminator}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.folder}/${log_discriminator}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.folder}/${log_discriminator}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- archived logs will be kept for 10 days -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- Size is not factored in the into removal logic -->
<maxFileSize>5GB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- Only keep last 10 days worth log files -->
<maxHistory>10</maxHistory>
<totalSizeCap>500MB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<prudent>true</prudent>
</appender>
</sift>
</appender>
<!-- ... -->
</configuration>
LogDiscriminator.java
public class LogDiscriminator {
...
public static void setLogFileType(String appType) {
// Case 1 - logback was able to delete after 10 days of log
// MDC.put("log_discriminator", appType); // e.g. ser_1, ser_2 or ser_3 (3 services)
// Case 2 - added UUID (just to distingush between instances of the same app - e.g. 2 instances of ser_1), logback is not able to delete
MDC.put("log_discriminator", String.format("%s_%s", appType, UUID.randomUUID().toString()));
}
...
}