Как прокрутить файл журнала на запуске в logback

Я хотел бы настроить logback, чтобы сделать следующее.

  • Журнал в файл
  • Прокрутите файл, когда он достигнет 50 МБ
  • Только сохраните ценность 7 дней журналов
  • На запуске всегда генерируют новый файл (сделайте список),

У меня есть все это работающее за исключением последнего объекта, списка запуска. Кто-либо знает, как достигнуть этого? Вот конфигурация...

  <appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg \(%file:%line\)%n</Pattern>
    </layout>

    <File>server.log</File>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <FileNamePattern>server.%d{yyyy-MM-dd}.log</FileNamePattern>
      <!-- keep 7 days' worth of history -->
      <MaxHistory>7</MaxHistory>

      <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <MaxFileSize>50MB</MaxFileSize>
      </TimeBasedFileNamingAndTriggeringPolicy>

    </rollingPolicy>
  </appender>
44
задан Undo 7 June 2013 в 21:53
поделиться

3 ответа

Создайте свой собственный подкласс ch.qos.logback.core.rolling.TimeBasedRollingPolicy и переопределите его start

public class MyPolicy
    extends ch.qos.logback.core.rolling.TimeBasedRollingPolicy
{

    public void start ( )
    {
        super.start( );
        rollover( );
    }
}
1
ответ дан 26 November 2019 в 22:17
поделиться

Переопределение метода isTriggeringEvent () в ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP должно работать нормально. Просто верните true при первом вызове метода isTriggeringEvent ().

3
ответ дан 26 November 2019 в 22:17
поделиться

Решение Ceki, похоже, не работает для меня, но похоже, по крайней мере, частично.

Он взрывается, потому что не может видеть текущую политику при запуске TimeBasedFileNamingAndTriggeringPolicyBase . С помощью некоторого хакерства я получил его для ведения журнала, а с помощью еще нескольких я получил его для наблюдения за триггером, но затем он снова сломался, потому что не смог разрешить одно из свойств имени файла ... Пакет является пакетом для журнала, поэтому я может добраться до некоторых внутренних компонентов, чтобы воспроизвести часть логики в SizeAndTimeBasedFNATP # isTriggeringEvent и вызвать computeCurrentPeriodsHighestCounterValue . Я думаю, что что-то в этом роде может сработать, просто еще не нашел волшебной комбинации. Я действительно надеюсь, что делаю что-то глупое, потому что в противном случае я думаю, что это будет означать либо раскрытие некоторых деталей для создания подклассов, либо помещение их прямо в логбэк в качестве другой политики прокрутки / запуска.

logback.xml: пробовали различные упорядочения triggeringPolicy , TimeBasedFileNamingAndTriggeringPolicy внутри и вне RollingPolicy .

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_DIR}/${LOG_FILE_BASE}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_DIR}/${LOG_FILE_BASE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <MaxHistory>7</MaxHistory>

        <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.RollOnStartupPolicy" />
    </rollingPolicy>

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>

    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>

Политика триггера:

package ch.qos.logback.core.rolling;
public class RollOnStartupPolicy<E> extends SizeAndTimeBasedFNATP<E> {
private final AtomicBoolean firstTime = new AtomicBoolean(true);

    @Override
    public boolean isTriggeringEvent(File activeFile, E event) {
        if (!firstTime.get()) { // fast path
            return false;
        }

        if (firstTime.getAndSet(false)) {
            return true;
        }
        return false;
    }
}

Исключение:

java.lang.NullPointerException
at  at ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBase.start(TimeBasedFileNamingAndTriggeringPolicyBase.java:46)
at  at ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP.start(SizeAndTimeBasedFNATP.java:36)
at  at ch.qos.logback.core.joran... [snip joran config]
2
ответ дан 26 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: