Java 如何删除旧的滚动日志4j2,最多保留10个文件?
我想要的是:Java 如何删除旧的滚动日志4j2,最多保留10个文件?,java,logging,log4j,log4j2,rollingfileappender,Java,Logging,Log4j,Log4j2,Rollingfileappender,我想要的是: 总共最多10个日志文件 每个日志文件的大小不超过50MB 因此,logs文件夹的大小永远不会超过(50MB*10)=500MB 但是我的log4j2配置似乎没有正确完成 正在发生的是: 日志在50MB后确实会滚动 但每天最多保存10个日志 因此,日志文件夹中保存的日志文件数量没有限制(例如,在2天内,收集了20个50mb的日志) 以下是配置: <Configuration status="WARN"> <Appenders>
- 总共最多10个日志文件
- 每个日志文件的大小不超过50MB
- 日志在50MB后确实会滚动
- 但每天最多保存10个日志
- 因此,日志文件夹中保存的日志文件数量没有限制(例如,在2天内,收集了20个50mb的日志)
<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>
%d%p%c{1.}[%t]%m%n
我做错了什么?自2.5以来,Log4j支持在每次滚动时执行的 您可以通过以下方式控制删除哪些文件:
<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>
另一方面,请注意,您可以使它们占用更少的磁盘空间
最后,要小心!无法恢复以这种方式删除的文件。:-) 基于时间的触发策略基于
文件模式
工作。基本上,文件模式中的最小时间单位(%d
)是触发时间间隔。在您的情况下,该值为“dd”,因此每天都会触发该策略
在您的文件模式中出现%i会在一天内保留多个日志文件。
我建议尝试在log4j 2.1中不使用%I
文件模式
的任何方法,而不是作为log4j函数。您需要编写脚本来删除操作系统中的旧日志……不过我强烈建议升级。您无法升级的原因是什么?唯一的原因是得到我的经理的批准:)。无论如何,我升级到了2.7。谢谢