log4j2 SizeBasedTriggeringPolicy создает файлы каждую минуту

У меня есть log4j2.xml с одним из приложений, как показано ниже:

        <RollingFile name="performance" 
            filePattern="/logs/myapp/myapp.%d{yyyy-MM-dd}.%i.perf.log"
            append="true">
            <Policies>
                <CronTriggeringPolicy schedule="0 * * * * ?" evaluateOnStartup="true"/>
                <SizeBasedTriggeringPolicy size="500 MB"/>                  
            </Policies>
        </RollingFile>

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

Но это приводит к тому, что файл журнала создается каждую минуту, например

myapp.2018-05-10.1.perf.log

myapp.2018-05-10.2.perf.log

...

myapp.2018-05-10.121.perf.log

Не уверен, что мне здесь не хватает. Любая помощь/предложения с благодарностью.


person jborder    schedule 10.05.2018    source источник


Ответы (2)


Ваше выражение cron неверно.

<RollingFile name="performance" 
        filePattern="/logs/myapp/myapp.%d{yyyy-MM-dd}.%i.perf.log"
        append="true">
        <Policies>
            <CronTriggeringPolicy schedule="0 0 12 1/1 * ? *" evaluateOnStartup="true"/>
            <SizeBasedTriggeringPolicy size="500 MB"/>                  
        </Policies>
    </RollingFile>

Вот правильный подход

<RollingFile name="performance" 
    filePattern="/logs/myapp/myapp.%d{yyyy-MM-dd}.%i.perf.log"
    append="true">
    <Policies>
            <OnStartupTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="500 MB" />
            <TimeBasedTriggeringPolicy />
    </Policies>
</RollingFile>

Приложение может понять, на какой временной интервал мы ссылаемся, благодаря шаблону, используемому для имени файла, «app.%d{MM-dd-yyyy}.%i.log.gz», который неявно устанавливает рулон происходить каждый день и сжимает свернутый файл.

person utpal416    schedule 10.05.2018
comment
Ну, у меня было ‹CronTriggeringPolicy schedule=0 * * * * ? AssessmentOnStartup=true/› работает нормально до последних нескольких месяцев. Теперь, когда я хочу добавить ролловер на основе размера к своему приложению, нужно ли изменить cron? не уверен, что понимаю это правильно. - person jborder; 10.05.2018
comment
Когда вы объединяете время и размер двух политик, вам не нужна CronTriggeringPolicy (это может не сработать). Поэтому я исправил ответ, и он будет работать в соответствии с вашими требованиями. - person utpal416; 11.05.2018

ну, я использовал последний подход, удаляя политику crontriggering, и это, похоже, не сработало. Например, файлы журнала от 13 мая были записаны в файлы myapp.2018.05.12.2.perf.log, а файлы журнала от 14 мая — в файлы myapp.2018.05.13.1.perf.log.

-rw-r--r-- app app  57329 May 12 23:56 myapp.2018.05.12.1.perf.log
-rw-r--r-- app app 335745 May 13 23:56 myapp.2018.05.12.2.perf.log
-rw-r--r-- app app 515998 May 14 07:55 myapp.2018.05.13.1.perf.log
person jborder    schedule 14.05.2018
comment
Кажется, ваше первоначальное требование (время и размер) работает в соответствии с вашими ожиданиями. Что касается проблемы с несоответствием дат, это связано с версией, которую вы используете, пожалуйста, следуйте за ошибкой и обновите версию в соответствии с потоком. Надеюсь, это будет работать issues.apache.org/jira/browse/LOG4J2-116 - person utpal416; 14.05.2018