Logback创建一次文件并写入此文件,即使它是从过去的一天开始

时间:2018-02-15 10:31:49

标签: java xml logging logback

我希望每天都有一个新的文件被触发显然它只是附加旧文件,无论它是什么日子。这是我的logback.xml。

<timestamp key="byDay" datePattern="yyyy-MM-dd"/>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
   <file>/opt/tomcat/logs/log-${byDay}.log</file>
   <append>true</append>
   <immediateFlush>true</immediateFlush>
  <encoder>
   <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
   </encoder>
</appender>
<root level="DEBUG">
    <appender-ref ref="FILE" />
</root>

1 个答案:

答案 0 :(得分:1)

您的配置中存在多个问题。

  • 你不需要时间戳元素,正如@csenga所说
  • 您需要RollingFileAppender而不是FileAppender
  • &LT;文件...&gt;应该没有日期模式,即常量文件名前缀

更正了配置(请注意我设置滚动每分钟发生一次):

<configuration scan="true" debug="true">
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/opt/tomcat/logs/log.log</file>
        <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>/opt/tomcat/logs/log_%d{yyyy-MM-dd_HHmm}.log
            </FileNamePattern>
        </rollingPolicy>
        <immediateFlush>true</immediateFlush>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <root level="DEBUG">
        <appender-ref ref="FILE" />
    </root>
</configuration>

结果文件:

riskop@riskop:/opt/tomcat/logs$ ls -l
total 24
-rw-rw-r-- 1 riskop riskop 13640 febr  15 14:30 log_2018-02-15_1430.log
-rw-rw-r-- 1 riskop riskop   310 febr  15 14:31 log_2018-02-15_1431.log
-rw-rw-r-- 1 riskop riskop   155 febr  15 14:37 log.log

如果您查看了logback自己的日志记录,那么您将看到已记录回滚:

14:37:20,673 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Elapsed period: Thu Feb 15 14:31:01 CET 2018
14:37:20,673 |-INFO in c.q.l.co.rolling.helper.RenameUtil - Renaming file [/opt/tomcat/logs/log.log] to [/opt/tomcat/logs/log_2018-02-15_1431.log]

如果省略&lt;档案&gt;来自配置的参数,然后将根据日期时间模式命名当前文件。这不是通常的配置恕我直言,因为在这种情况下你乍看之下你不会看到当前文件是什么。