java - Logback 创建一个文件一次并写入该文件,即使它是过去的一天

标签 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>

最佳答案

您的配置中有多个问题。

  • 您不需要时间戳元素,正如 @csenga 指出的
  • 您需要 RollingFileAppender 而不是 FileAppender
  • < file... > 不应有日期模式,即常量文件名前缀

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

<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]

如果在配置中省略 参数,则当前文件将根据日期时间模式命名。恕我直言,这不是通常的配置,因为在这种情况下,您第一眼看不到当前文件是什么。

关于java - Logback 创建一个文件一次并写入该文件,即使它是过去的一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48805041/

相关文章:

php - 将 XML 文件元素转换为 PHP 数组

xml - Windows 任务计划程序输出

c# - #if(DEBUG) 和 log4net 行号源/运行时不匹配

c# - 引入没有源代码污染的日志记录

java - 应用程序无法在 ADB 上运行

java - 如何将文本值从 ViewHolder 发送到 ItemTouchHelper 类?

java - Spring 3.0 MVC 数据绑定(bind)与 HTTP PUT

java - Play 中按参数数据类型进行路由

java - 如何使用 Play framework 2.0/2.1 制作管理面板

java - 尝试使用 Eclipse 制作我的第一个应用程序时出错