文
章
目
录
章
目
录
在Log4j2中,使用RollingFileAppender和DefaultRolloverStrategy可以配置“删除”操作,从而在特定时间后删除旧的日志文件。
1.Log4j2删除操作
在log4j2中,RollingFileAppender需要一个TriggeringPolicy和RolloverStrategy。触发策略确定是否应该执行滚动,而滚动策略定义了如何执行滚动。
在Log4j2 2.5之前,DefaultRolloverStrategy的max属性是在滚动时删除日志的唯一选项。例如,每天开始之前,log4j将创建最多10个日志文件(每个20MB)。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="20MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
自Log4j2 2.5以来,新的Delete操作使用户可以更好地控制哪些文件在滚动时被删除,以及删除过去生成的其他日志文件。
例如,每天午夜时分,log4j滚动过程将删除基本目录中30天或更老的日志文件。
<DefaultRolloverStrategy>
<Delete basePath="${baseDir}" maxDepth="2">
<IfFileName glob="*/app-*.log.gz" />
<IfLastModified age="P30D" />
</Delete>
</DefaultRolloverStrategy>
2.保留某些日志并删除其他日志
在某些情况下,我们可能不想删除过去生成的所有日志文件;相反,我们可能希望根据日志文件的大小或数量保留一些旧的日志。
以下配置将删除匹配“/app-.log.gz”的文件,这些文件是30天或更老的,但保留最近的100GB或最近的10个文件,以先到者为准。
<DefaultRolloverStrategy max="100">
<Delete basePath="${baseDir}" maxDepth="2">
<IfFileName glob="*/app-*.log.gz">
<IfLastModified age="P30D">
<IfAny>
<IfAccumulatedFileSize exceeds="100GB" />
<IfAccumulatedFileCount exceeds="10" />
</IfAny>
</IfLastModified>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
3.properties属性配置
我们还可以在log4j2.properties文件中以以下方式配置Delete操作:
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${baseDir}
appender.rolling.strategy.action.maxdepth = 2
appender.rolling.strategy.action.condition.type = IfLastModified
appender.rolling.strategy.action.condition.age = 30D
appender.rolling.strategy.action.PathConditions.type = IfFileName
appender.rolling.strategy.action.PathConditions.glob = */app-*.log.gz
4.结论
在本简短的Log4j2教程中,我们学习了如何在滚动事件时删除旧日志文件。我们学习了如何根据聚合日志文件的大小和数量删除更旧的日志。我们还学习了如何使用属性文件配置Delete操作。