日志返回在运行时更改配置和日志文件创建问题



我有一个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的文件属性,并在文件名中添加一个dateppattern,我已经尝试过这个代码:

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")上。

是否有一个设置来实现?

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

一个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>

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

aleroot - % d {ddMMyyyy} . log

最新更新