изменение конфигурации logback во время выполнения и проблема создания файла журнала - PullRequest
1 голос
/ 09 декабря 2011

У меня есть файл конфигурации logback.xml, который выглядит следующим образом:

<configuration>

 <property name="defaultPattern"
        value="%d{dd/MM/yyyy HH:mm:ss.SSS} [%thread] %-5level - %msg%n" />

 <!-- Appenders Configuration -->
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <target>System.err</target>
    <filter class="com.aleroot.ErrOutFilter" />
    <encoder>
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>aleroot.log</file>
    <append>true</append>
    <encoder>
      <pattern>${defaultPattern}</pattern>
    </encoder>
  </appender>


  <!-- Output Configuration -->
  <root level="debug">
    <appender-ref ref="FILE" />
    <appender-ref ref="CONSOLE"/>
  </root>

  <logger name="mainLogger" level="debug">
    <appender-ref ref="FILE" />
    <appender-ref ref="CONSOLE"/>
</logger>

</configuration>

Я хочу изменить свойство файла приложения FILE во время выполнения и добавить DatePattern вимя файла, я пробовал с этим кодом:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
          ch.qos.logback.classic.Logger logbackLogger = lc.getLogger("mainLogger");
          FileAppender<ILoggingEvent> fileAppender =
                  (FileAppender<ILoggingEvent>) logbackLogger.getAppender("FILE");
              if(fileAppender != null) {
                fileAppender.stop();
                fileAppender.setFile("aleroot-ddMMyyyy.log");
                fileAppender.setContext(lc);
                fileAppender.start();
              }

Проблема в том, что файл aleroot.log создается в любом случае, даже если я изменил имя файла , более того я получаю другой файл, который называется точно: aleroot-ddMMyyyy.log, в то время как я хочу иметь имя файла, например aleroot-04122011.log .Как я могу этого достичь?

Существуют ли настройки, позволяющие избежать создания файла журнала при вызове LoggerFactory.getLogger("mainLogger")?Я хочу, чтобы файл журнала создавался только в первый раз, когда я записываю файлы журнала, нет необходимости создавать пустой файл журнала.Файл журнала должен быть создан в первый раз, когда я что-то записываю в журнал, например, при первом logger.debug("Something.log").

Есть ли настройки для этого?

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Создание отложенного журнала пока не поддерживается. Но для него есть новый запрос http://jira.qos.ch/browse/LBCORE-184

A RollingFileAppender (ссылка) с TimeBasedRollingPolicy (ссылка) может оказать здесь большую помощь. Это позволяет указать шаблон файла, а также, когда вы хотите, чтобы LB создал новый файл журнала (каждую минуту / час или ежедневно, еженедельно или ежемесячно).

Пример конфигурации с данного сайта.

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logFile.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>aleroot-%d{yyyy-MM-dd}.log</fileNamePattern>

      <!-- keep 30 days' worth of history -->
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender> 

  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>
0 голосов
/ 09 декабря 2011

Я бы подумал, что имени файла понадобится какой-то шаблон, чтобы распознать, что вам нужна дата.Если это вообще поддерживается в logback ..

aleroot-% d {ddMMyyyy} .log

...