运行时的logback更改配置和日志文件创建问题

时间:2011-12-08 21:49:48

标签: java logging logback

我有一个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 appender的文件属性,并在文件名中添加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 个答案:

答案 0 :(得分:1)

尚不支持延迟日志创建。但是有一个新的功能请求http://jira.qos.ch/browse/LBCORE-184

RollingFileAppender(link) TimeBasedRollingPolicy(link)可能对此有很大帮助。这允许您指定文件模式,以及何时希望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>

答案 1 :(得分:0)

我认为文件名需要某种模式来识别你想要一个日期。如果那是logback中的支持..

  

aleroot-%d {DDMMYYYY}的.log