Log4j2如何定时删除旧的日志文件
在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操作。