Настройка RollingFileAppender

Добрый день!
Столкнулся с непонятным поведением приложения.
Имеем такой аппендер logback:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDir}/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${logDir}/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>500MB</maxFileSize>
        <maxHistory>30</maxHistory>
        <totalSizeCap>10GB</totalSizeCap>
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread%X{cubaApp}%X{cubaUser}] %logger - %msg%n</pattern>
    </encoder>
</appender>

Ожидаемое поведение:

  • текущий лог пишется в файл app.log;
  • в 0.00 накопленные за сутки записи из файла app.log сбрасываются в файл с именем, включающим дату за которую эти записи были накоплены, например (app-2020-05-14.0.log).
  • если файл лога за сутки превышает 500 Мб, то он разбивается на отдельные файлы с именами app-2020-05-14.0.log, app-2020-05-14.1.log, app-2020-05-14.2.log и т.д.
  • сохраняем записи за предыдущие 30 дней, но не более 10 Гб.

Фактическое поведение:

  • каждые сутки в 00.00 создается файл app.log, в который начинает писаться текущий лог. Также имеется файл с записями за предыдущие сутки, назовем его app-2020-05-14.0.log.
  • каждые сутки в 8.00 происходит автоматически перезапуск приложения (первый за эти сутки - это важно).
  • после перезапуска файл app.log переписывается и в нем сохраняются записи только с момента перезапуска, т.е. с 8.00. Те записи, которые были в файле app.log c 0.00 до 8.00, сбрасываются в файл за предыдущее число (app-2020-05-14.0.log), полностью его переписывая.

Таким образом, мы теряем информацию за предыдущее число с 8.00 до 24.00. А записи за предыдущее число с 0.00 до 8.00 в свою очередь будут находиться в файле за пред-предыдущее число (app-2020-05-13.0.log).
При этом, последующие переподъемы приложения в эти же сутки, не приводят к подобным действиям. Запись корректно продолжается в файл app.log.

Выслушаю любые советы или мысли вслух.

2 симпатии

Это регулярная ситуация в продакшене. При этом запись в предыдущий файл лога идет независимо от его размера и времени. Есть идеи как починить и заставить аппендеры писать в корректные файлы? Или это фича и придется с этим жить?

Мне кажется, вам лучше обратиться по этой проблеме куда-нибудь в сообщество или трекер тикетов библиотеки logback.
http://logback.qos.ch/

Наверное попробуем.
Но по вашей практике - такое поведение нормальное или что-то не корректно?

Похоже на баг.
Я в своей практике не использовал SizeAndTimeBasedRollingPolicy, поэтому не сталкивался с проблемой.