我想要的是:
因此,logs文件夹永远不会增长(50MB * 10)= 500MB。
但似乎我的log4j2配置没有正确完成。
发生的事情是:
这是配置:
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="log/my.log" filePattern="log/my-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
我做错了什么?
答案 0 :(得分:5)
从2.5开始,Log4j支持在每次翻转时执行的custom Delete action。
您可以通过以下方式控制删除哪些文件:
以上可以合并。而不是仅指定大小条件以将磁盘使用率降至最大500MB,最好也匹配名称,以免您无意中删除不相关的文件。
需要对要删除的文件进行更细粒度控制的用户可以使用任何受支持的JSR-223脚本语言指定脚本条件。
请查看documentation,它有三个可能有用的完整示例。
对于您的问题,此代码段可能有效:
<DefaultRolloverStrategy>
<!--
* only files in the log folder, no sub folders
* only rolled over log files (name match)
* either when more than 10 matching files exist or when the max disk usage is exceeded
-->
<Delete basePath="log" maxDepth="1">
<IfFileName glob="my-??-??-????-*.log">
<IfAny>
<IfAccumulatedFileSize exceeds="500 MB" />
<IfAccumulatedFileCount exceeds="10" />
</IfAny>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
另外,请注意您可以compress log files on rollover使它们占用更少的磁盘空间。
最后,小心!没有办法恢复以这种方式删除的文件。 : - )
答案 1 :(得分:1)
TimeBasedTriggeringPolicy
根据filePattern
工作。基本上,文件模式中的最小时间单位(%d
)是触发时间间隔。在您的情况下,值为“dd”,因此每天都会触发策略。
filePattern
中存在%i会保留一天的多个日志文件。
我建议您不要使用%i
中的filePattern
进行尝试。