Что определяет, когда log4j TimeBasedRollingPolicy переворачивается? - PullRequest
4 голосов
/ 25 марта 2011

Я настраиваю TimeBasedRollingPolicy из Log4J Extras , и мне не ясно, что говорит политике, когда пролонгировать. API не является явным, поэтому я просто делаю выводы.Похоже, что это последний элемент в FileNamePattern, который определяет частоту.

Взять этот пример из log4j Wiki :

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
    <!-- The active file to log to -->
    <param name="file" value="/applogs/myportal/portal.log" />
    <param name="append" value="true" />
    <param name="encoding" value="UTF-8" />

    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
    <!-- The file to roll to, this is a fairly intelligent parameter, if the file
         ends in .gz, it gzips it, based on the date stamp it rolls at that time, 
         default is yyyy-MM-dd, (rolls at midnight)
    -->
        <param name="FileNamePattern" value="/applogs/myportal/portal.%d.log.gz" />
    </rollingPolicy>

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
    </layout>
</appender>

Могу ли я предположитьчто, поскольку шаблон оканчивается на dd, политика должна катиться, когда это изменится?То же самое с примером в API, шаблон yyyy-MM означает, что файл должен катиться, когда MM изменяется?

Спасибо!

Пол

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Ну, мне пришлось бы перепроверить, но я бы сказал, что всякий раз, когда строка, созданная путем форматирования текущей даты с изменением строки форматирования, файл катится. Это означает: если вы форматируете дату, используя «гггг-мм-дд», результат будет меняться каждый день. Это также может произойти только с «dd», НО вы будете получать одно и то же имя файла каждый месяц, таким образом, файлы либо перезаписываются, либо добавляются, либо происходит сбой, поскольку файл уже существует (не уверен, что это правда, зависит от appender, я полагаю, в этом случае будут добавлены журналы, за исключением, может быть, способа gzip).

Edit:

Пример: если у вас есть mylog.%d{dd}.log, итоговый файл журнала на сегодня (2011-03-27) будет иметь имя mylog.25.log (из-за форматирования новой даты () при ведении журнала) и будет добавлять сообщения в этот файл. Завтра используемый сейчас файл будет иметь имя mylog.26.log. 25 апреля вы снова получите имя файла `mylog.25.log, поэтому все журналы с этого дня будут добавлены в файл, который уже содержит журналы с 25 марта.

2 голосов
/ 06 июля 2017

Я получил это работает.Ниже приведен код для log4j.Вам нужно только добавить зависимости log4j-extras в pom.xml и использовать приведенный ниже код: приведенный ниже код обновляется каждую минуту и ​​создает файл .zip.

<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">    
    <param name="FileNamePattern" value="/opt/app/srdotcom/logs/portal.%d{yyyy-MM-dd-HH-mm}.log.zip" />
</rollingPolicy>

<layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{YYYY-MM-dd HH:mm:ss:SSS z}| %c{2}| %m%n" />
</layout>

Зависимости Maven:

  <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>apache-log4j-extras</artifactId>
        <version>1.2.17</version>
    </dependency>
...