2016-01-19 8 views
1

Я пытаюсь настроить скользящий список журналов, который будет опрокидываться каждый день, а также опрокидывание, когда файл журнала достигает определенного порогового размера. У меня есть основная работающая настройка, но если я перезапущу приложение, поведение опрокидывания полностью сломается.файл скользящего журнала не очищается

Моей текущий Appender конфигурация, основанная на http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP

<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${my.log.dir}/mylog.txt</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- rollover daily --> 
     <fileNamePattern>${my.log.dir}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> 
     <cleanHistoryOnStart>true</cleanHistoryOnStart> 
     <timeBasedFileNamingAndTriggeringPolicy 
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <!-- or whenever the file size reaches 10KB --> 
      <maxFileSize>10KB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%-5level %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern> 
    </encoder> 
</appender> 

Я добавил «LogSpammer» сценарий для быстрого получения данных журнала, и первый раз, когда я запустить приложение, кажется, все в порядке. mylog.txt достигает ~ 10 КБ и сбрасывается в один из файлов с датой.

Log files the first time I run. Everything seems ok

Но если перезапустить приложение, дела идут наперекосяк. Основной файл журнала никогда не очищается, но он копируется снова и снова, причем размер копии увеличивается каждый раз. Больше ничего не очищается.

Log files the second time I run. File sizes keep growing. Not good!

Я позволил этому работать, пока каждый «опрокидывание» не было более 500 КБ, а над моей maxFileSize из 10KB.

Это просто ошибка? Если нет, я что-то не так с конфигурацией делаю? Как я могу это исправить?

ответ

0

Проблема возникла из-за невозможности полностью закрыть журнал LoggerContext, когда приложение (веб-приложение) было перезапущено.

В моем случае webapp был остановлен и запущен через container:start и container:stop в sbt. Это похоже на «развертывание» и «развертывание» файла .war на Tomcat. Поскольку JVM не закрывался, и явным образом не был остановлен журнал, он смог сохранить блокировку в главном файле журнала. Вызов container:start после этого приводит к странности, описанной в вопросе.

Полностью выключив JVM и , затем работает container:start разрешил функционал регистрации/опрокидывания работать нормально.

stop Вызов метода LoggerContext «s во время "разгрузки" крюка WebAPP в решает эту проблему:

// I happened to be using slf4j's, so I use its LoggerFactory 
// class to get the LoggerContext instance 
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
lc.stop(); 
Смежные вопросы