RollingFileAppender中的FileNamePattern - logback配置

23

我在我的logback配置文件中有以下的RollingFileappender。

<appender name="RollingFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <File>C:\Files\MyLogFile.log</File>      
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
  <FileNamePattern>C:\Files\MyLogFile.%d{yyyy-MM-dd}.log</FileNamePattern>       
  <MaxHistory>30</MaxHistory>     
  </rollingPolicy>      
  <encoder>
      <pattern>%date %level [%thread] %logger{60} [%file:%line] %msg%n</pattern>
    </encoder> 
  </appender>

它确实将一个文件写入上述目录,名称为 MyLogFile.log,但并未按照 FileNamePattern 中指定的追加日期。有什么想法可以让我在文件名中追加日期?谢谢。


这是一个很好的问题,也让我感到困惑。LogBack一直记录到MyLogFile.log文件中,却从未出现在MyLogFile.%{yyyy-MM-dd}.log文件中。我想知道这个文件属性的用途是什么。 - Dimitri Dewaele
2个回答

29
TimeBasedRollingPolicy 的文档说明如下:

请注意,TimeBasedRollingPolicy的父级RollingFileAppender中的file属性可以被设置或省略。通过设置包含的FileAppender的文件属性,您可以将活动日志文件的位置与归档日志文件的位置解耦。当前的日志将始终针对由file属性指定的文件进行记录。因此,目前活动日志文件的名称不会随时间而变化。但是,如果选择省略file属性,则每个周期将基于fileNamePattern的值重新计算活动文件。

在您的情况下,只需省略file属性即可。


网页上的示例http://logback.qos.ch/manual/appenders.html已经失效,它同时使用了file和fileNamePattern。 - Marx

3
例如,您可以使用以下配置。经过测试,它可以正常工作 :)
<!-- FILE APPENDER WITH PRUDENT MODE -->
<!-- IN PRUDENT MODE CANNOT BE SPECIFIED FILE, THIS PARAM IS OBTAINED FROM FILE NAME PATTERN -->
<!-- IN PRUDENT MODE ONLY TIME BASED ROLLING POLICY IS SUPPORTED - BECAUSE WE HAVE A LOG OF MULTIPLE JVM INSTANCES-->
<!-- SEE MORE AT http://logback.qos.ch/manual/appenders.html#prudentWithRolling -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <prudent>true</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${logfile.path}-%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>

    <encoder>
        <pattern>${HOSTNAME} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接