这是logback的一部分:
<appender name="APP_LOG"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${APP_HOME}/loader.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${APP_HOME}/archived/loader.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- Keep logs max for x days -->
<maxHistory>1</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
这应该每天创建一个新的日志文件。今天是2016年1月13日,因此如果1月12日到2016年1月12日没有日志,它应该将当前日志放入loader.2016-01-12.0.log然后创建一个新的日志文件吗?它不是那样做的。
它也应该删除文件loader.2015-12-30.0.log和loader.2016-01-11.0.log,但它也没有这样做。
我所做的就是在基于Eclipse的IDE中启动应用程序,我可以验证每次运行应用程序时日志文件loader.log是否正在更改。这意味着logback正在启动,但由于某种原因,它没有正确清理旧文件。请帮帮忙?
答案 0 :(得分:0)
TimeBasedRollingPolicy的Logback文档指定maxHistory
的单位月,而不是天。
关于在没有创建日志的情况下创建空日志文件(大小为0),我记得log4j没有创建它们。 log4j中的OOTB日志轮换是被动,只有在新的一天将日志语句发送到log4j时才会触发。
我认为Logback的行为类似,但我正在检查,我很快就会更新这个答案。
编辑: 已确认。对于上一个日志语句和当前日志语句之间的任何完全过去的中间天,TimeBasedRollingPolicy
不会创建零大小的文件。
也就是说,如果您的每日轮换的上一个日志语句位于 2015-01-01 ,而您的下一个语句位于 2015-01-13 ,则后者处理语句,此时Logback仍然会打开 2015-01-01 的文件。它会注意到它会触发翻转,基本上包括:
但它不会创建任何中间零字节文件。