在使用LogBack打印日志,并根据每天和自定义大小拆分压缩文件时,**出现上百G的tmp文件,不会自动删除,另外,出现tmp没有删除的情况时,压缩文件里面的文件是空的。**
请问是什么情况,是否可以优化logback的配置。
当前应用的每日日志量大概在10G.
<!-- 文件输出 -->
<appender name="file_log"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/log.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${BACKUP}/log%d{yyyy-MM-dd}-%i.log.zip
</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<charset>${CHARSET}</charset>
<pattern>${PATTERN_DEF}</pattern>
</encoder>
</appender>
和文件权限有什么关系,文件都能写入了?
我发现机器性能好的,出现这种情况比较少!
另外,出现tmp没有删除的情况时,压缩文件里面的文件是空的。
是不是tmp文件被lock住了,造成没写入,也无法删除
解决了吗?近期遇到了相同的问题
升级至logback到1.1.6以上即可解决。
核心类:TimeBasedRollingPolicy#rollover()方法
根据源码,找到了两个会清理日志文件的地方。1. 压缩*.zip文件之后,*.tmp会被删除;2. 设置了MaxHistory最大保留期限,是会清理*.zip文件的。
第一种:压缩完之后有一个delete()操作,如果所在用户没有删除的权限的话(这种可能性不大),tmp是不会被清除的 ;还有就是压缩完之后,还未删除tmp文件,应用就死掉了,那么这个tmp是不会被删除的(基本就是这么产生的)
第二种:未设置MaxHistory,默认是不会清理所有的log文件的;假如设置了MaxHistory,它也只是会删除 日期*.zip文件,*.tmp文件是不会被删除的。
解决方案:通过linux脚本定时删除logs/*.tmp 文件
找了好多文章说升级logback版本,但是并没有什么用啊,希望早日解决