我希望每天都有一个新文件被触发,显然它只是附加旧文件,无论是哪一天。这是我的 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/