Logback: Удалить только на основе даты, а не файла шаблона? - PullRequest
0 голосов
/ 20 марта 2019

Я использую 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()));
    }
    ...
}
...