Как действительно работает атрибут Log4j2 DefaultRolloverStrategy max?

Я настроил RollingRandomAccessFileAppender только с установкой OnStartupTriggeringPolicy, но когда я установил максимальный атрибут DefaultRolloverStrategy к некоторому числу, журналы продолжают генерировать минус эту сумму на неопределенный срок.

Здесь мой log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <RollingRandomAccessFile 
            name="RollingRAF" 
            fileName="logs/app.log"
            filePattern="logs/app-%d{[email protected]}.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="myLogger" level="warn">
            <AppenderRef ref="RollingRAF"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Это потому, что у меня нет итератора в моем шаблоне имен?

Это потому, что моя точность имени файла установлена ​​на секунды?

Это потому, что у меня есть только OnStartupTriggeringPolicy?

Или что здесь происходит?

Моя цель состояла в том, чтобы настроить скользящую конфигурацию, которая будет регистрировать последние 5 запусков приложений.

Ответы

Ответ 1

DefaultRolloverStrategy будет использовать шаблон даты, указанный в filePattern, если указан параметр TimeBasedTriggeringPolicy. Чтобы использовать атрибут max, укажите шаблон %i в файлеPattern и добавьте <SizeBasedTriggeringPolicy size="20 MB" /> в политики опрокидывания. (Или какой-то другой размер, конечно.)

Значение max в <DefaultRolloverStrategy max="5"/> будет гарантировать, что в течение одного и того же периода опрокидывания (одна секунда для вас, так как вы указали шаблон даты %d{[email protected]}) не более 5 файлов будут созданы, когда опрокидывание на основе размера был вызван.

Это более полезно, если ваше окно опрокидывания больше, например, каждый день переходить на новую папку и внутри этой папки, гарантировать, что не более 5 файлов создаются с максимальным размером = 20 МБ.


Update:

Log4j 2.5 добавила возможность настраивать пользовательские действия удаления. Из коробки вы можете удалять файлы по возрасту, количеству или количеству занимаемого места на диске (накопленный размер файла).