Переход к SizeAndTimeBasedRollingPolicy из TimeBasedRollingPolicy для переключения на каждую ночь или на максимальный размер - PullRequest
0 голосов
/ 04 января 2019

Когда я использую следующий appender

<appender name="APPLICATION"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>D:/logs/log.txt</file>
    <append>true</append>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>%p %d [%t] %L - %m%n</Pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>D:/logs/log.%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>
</appender>

, я получаю следующее предупреждение:

SizeAndTimeBasedFNATP устарела.Вместо этого используйте SizeAndTimeBasedRollingPolicy

Поэтому я изменяю SizeAndTimeBasedFNATP на SizeAndTimeBasedRollingPolicy

, что оставляет меня с этим:

<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>

, но затем я получаю:

Не установлен TriggeringPolicy для приложения RollingFileAppender с именем APPLICATION

, что заставляет меня думать, что такой TriggeringPolicy нет, поэтому я возвращаю TriggeringPolicy обратно к SizeAndTimeBasedFNATP и изменяю прокруткуполитика от TimeBasedRollingPolicy до SizeAndTimeBasedRollingPolicy.

Моя новая подвижная политика теперь становится:

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>D:/logs/log.%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
</rollingPolicy>

Но затем я получаю:

TriggeringPolicy не запущена.RollingFileAppender не запускается

Я пытаюсь выполнять опрокидывание каждую полночь или после достижения максимального размера, в зависимости от того, что произойдет раньше.Сейчас я использую версию logback: 1.2.3

1 Ответ

0 голосов
/ 04 января 2019

наконец-то понял, что maxFileSize должно быть за пределами timeBasedFileNamingAndTriggeringPolicy, а SizeAndTimeBasedRollingPolicy не требует этого.Итак, окончательный logback.xml, который катится по времени и размеру (в зависимости от того, что наступит раньше), становится:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <!-- Send debug messages to System.out -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%p %d [%t] %L - %m%n</pattern>
        </encoder>
    </appender>
    <appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D:/logs/log.txt</file>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%p %d [%t] %L - %m%n</Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>D:/logs/log.%d{yyyy-MM-dd HH}.%i.txt</fileNamePattern>
            <maxFileSize>5GB</maxFileSize>
            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <logger name="javaportreader" level="INFO" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>
    <logger name="application" level="DEBUG" additivity="false">
        <appender-ref ref="APPLICATION"/>
    </logger>

    <!-- By default, the level of the root level is set to DEBUG -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
    <root level="INFO">
        <appender-ref ref="APPLICATION"/>
    </root>
</configuration>
...