我在我的应用程序中使用 log4j,并且日志是使用此框架生成的。
我想删除超过 10 天的日志,因为日志大小正在迅速增加。
我知道 MaxFileSize 和 MaxBackupIndex 通常会根据生成的文件数量进行删除,但我的要求是删除早于特定天数的日志。我们在 log4j 中是否有任何选项可以实现此目的,或者我们是否需要使用如下所示的一些 unix 脚本并清除日志?
find -type f -mtime +7 -exec rm -f {} \;
谢谢 哈沙 GNS
最佳答案
Log4j2 支持 custom Delete action在翻转配置中。这应该正是您正在寻找的。
下面是一个示例配置,它使用 RollingFileAppender 并将 cron 触发策略配置为每天午夜触发。文件存储在基于当前年份和月份的目录中。基本目录下与 "*/app-*.log.gz"
glob 匹配且 60 天或更早的所有文件都会在翻转时删除:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Properties>
<Property name="baseDir">logs</Property>
</Properties>
<Appenders>
<RollingFile name="RollingFile" fileName="${baseDir}/app.log"
filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
<DefaultRolloverStrategy>
<Delete basePath="${baseDir}" maxDepth="2">
<IfFileName glob="*/app-*.log.gz" />
<IfLastModified age="60d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
关于java - 除了使用 MaxBackupIndex 之外,我们还可以删除 log4j 中早于特定天数的日志吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42408315/