2017-02-14 12 views
0

Моего требования (значения настроены для целей тестирования):TimeBased и SizeBased политика вместе для RollingFile в Log4j 2

  1. Лог-файлы должны быть максимального размером 1KB, за которым новый файл должен быть сгенерирован держать предыдущий файл нетронутым. Меня не волнует максимальное количество файлов, сгенерированных этим. Он не должен иметь верхнего предела.
  2. Каждую минуту файлы журнала предыдущей минуты должны быть преобразованы в .zip. Итак, если время 14:00:01, предположим, что для него создано 100 файлов журнала из-за ограничения 1 КБ. Теперь в 14:00:02, 100 журнальных файлов предыдущей секунды должны быть преобразованы в 100 .zip-файлов, и к концу 14:00:02 я должен иметь еще много 100 журнальных файлов.

Итак, в начале 14:00:03 у меня должно быть 100 файлов .log файлов за 14:00:02 и 100 .zip-файлов за 14:00:01.

Я пробовал различные комбинации значений параметров и политик, но не смог достичь этого. Когда я использую обе политики, я получаю .zip-файлы, как только предел 1KB превышен. Ниже приведена моя конфигурация. Пожалуйста, дайте мне знать, где я неправильно:

<RollingFile name="RollingFile" fileName="logs/utility.log" filePattern="logs/utility-%d{yyyy-MM-dd-HH-mm}-%i.zip" > 
    <PatternLayout> 
    <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern> 
    </PatternLayout> 
    <Policies> 
    <TimeBasedTriggeringPolicy/> 
<SizeBasedTriggeringPolicy size="1 KB" /> 
</Policies> 
</RollingFile> 

Если я изменить его ниже, я не получаю никаких архивных файлов:

<RollingFile name="RollingFile" fileName="logs/utility.log" filePattern="logs/utility-%d{yyyy-MM-dd-HH-mm}-%i.log" > 
    <PatternLayout> 
    <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern> 
    </PatternLayout> 
    <Policies> 
    <TimeBasedTriggeringPolicy> 
    <param name="FileNamePattern" value="logs/utility-%d{yyyy-MM-dd-HH-mm}-%i.zip" /> 
    </TimeBasedTriggeringPolicy> 
<SizeBasedTriggeringPolicy size="1 KB" /> 
</Policies> 
</RollingFile> 

ответ

0

Срабатывание политики являются именно - Методы Appender должны использовать чтобы выяснить, когда произойдет проскальзывание файла. Сжатие происходит автоматически при каждом опрокидывании, если шаблон файла заканчивается «нормальным» сжатым расширением файла. Чтобы изменить это поведение, вам нужно будет создать собственное действие, чтобы найти все файлы, созданные в предыдущую минуту, и сжать их.

действия определяются как

<RollingFile ...> 
    <DefaultRolloverStrategy>` 
    <Delete basePath="${baseDir}" maxDepth="2"> 
     <IfFileName glob="*/app-*.log.gz" /> 
     <IfLastModified age="60d" /> 
    </Delete> 
    </DefaultRolloverStrategy> 
</RollingFile> 
+0

По пользовательских действий, вы имеете в виду график работы? –

+0

RollingFileAppender использует plujgins «Action» для выполнения определенных операций, таких как переименование файлов, их сжатие и их удаление. Вы можете написать свой собственный плагин Action и добавить его в конфигурацию, как я показал выше. – rgoers

+0

Хорошо, попробуем это реализовать. Большое спасибо!! –