Как сделать log4j очистить журнал при запуске?

StackOverflow https://stackoverflow.com/questions/269999

  •  06-07-2019
  •  | 
  •  

Вопрос

Я хочу, чтобы журнал переворачивался до тех пор, пока приложение работает, но я хочу, чтобы журнал запускался заново при перезапуске приложения.

Обновлено: На основе отзывов erickson мой appender выглядит так:

   <appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
      <param name="File" value="my-server.log"/>
      <param name="Append" value="false" />
      <param name="MaxFileSize" value="10MB"/>
      <param name="MaxBackupIndex" value="10"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern"
            value="%d{ISO8601} %p - %t - %c - %m%n"/>
      </layout>
   </appender>

Я просто добавил следующую строку:

<param name="Append" value="false" />

Теперь он усекает базовый файл журнала при запуске, но оставляет свернутые файлы в покое.

Это было полезно?

Решение

Если вы установите для параметра append значение false , файл базового журнала будет «запущен заново»; когда приложение перезапускается. Вы имеете в виду, что хотите какой-нибудь "свернутый"? файлы журналов тоже будут удалены?

Другие советы

Я написал некоторый пользовательский код, чтобы найти мой RollingFileAppender (к которому излишне сложно получить доступ в log4j!), который я затем заставляю пролонгировать. Я адаптировал мой код ниже для одноразового использования. Я использую код, подобный этому, при запуске приложения, чтобы заставить мои журналы вращаться (если они не пустые), поэтому я всегда начинаю с нового журнала, но никогда не удаляю ни один журнал, кроме самого старого.

Этот код берет данный Logger и перебирает иерархию logger до тех пор, пока не найдет Logger, к которому присоединены Appenders. Если это никогда не происходит, тогда это сдается. Если это так, он перебирает все Appenders, подключенные к этому Logger, и для каждого из них, являющегося RollingFileAppender, принудительно запускает журнал.

Примерно так должно быть намного проще в log4j, но я не нашел более простого способа сделать это.

public void rollLogFile(Logger logger) {
  while (logger != null && !logger.getAllAppenders().hasMoreElements()) {
    logger = (Logger)logger.getParent();
  }

  if (logger == null) {
    return;
  }

  for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) {
    final Appender appender = (Appender)e2.nextElement();
    if (appender instanceof RollingFileAppender) {
      final RollingFileAppender rfa = (RollingFileAppender)appender;
      final File logFile = new File(rfa.getFile());
      if (logFile.length() > 0) {
        rfa.rollOver();
      }
    }
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top