Apache Log4j2:每天一个日志文件,删除旧文件
Apache Log4j2: one log file per day, with old file deletion
我正在使用 log4j 2.14.1。
我想做的是有一个附加程序,它让我每天有一个日志文件,但在 N 天后删除旧日志(例如,我想最多有 10 天的日志) .
我试过使用 DirectWriteRolloverStrategy,它看起来不错并且每天创建一个日志文件,但显然无法删除旧文件,所以我的日志目录被日志填满; maxFiles 属性似乎只设置了 The maximum number of files to allow in the time period matching the file pattern
(参见 https://logging.apache.org/log4j/2.x/manual/appenders.html)。删除操作似乎只适用于 DefaultRolloverStrategy。
我的appender配置:
appender.rolling.type = RollingFile
appender.rolling.name = ROLLING
appender.rolling.filePattern = /var/log/application-%d{yyyy-MM-dd}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC}Z][%p][%C:%L] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.strategy.type = DirectWriteRolloverStrategy
appender.rolling.strategy.maxFiles = 3
是否有任何方法可以使用属性配置该目录中日志的最大数量(或最长期限)?
正如 Ralph Goers 在 log4j-user
mailing list, you need to configure a Delete Action. Search for Delete on Rollover in the RollingFileAppender
manual 中指出的那样。
因此,经过一些摆弄,并在 Volkan 和 Ralph 的帮助下,我发现 Delete 操作也适用于 DirectWriteRolloverStrategy,即使我没有提供有效的代码片段。我发现属性按照我的要求是这样的:
appender.rolling.type = RollingFile
appender.rolling.name = ROLLING
appender.rolling.filePattern = /var/log/application-%d{yyyy-MM-dd}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC}Z][%p][%C:%L] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.strategy.type = DirectWriteRolloverStrategy
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.condition.type = IfFileName
appender.rolling.strategy.action.basepath = /var/log
appender.rolling.strategy.action.maxdepth = 1
appender.rolling.strategy.action.condition.glob = application*.log
appender.rolling.strategy.action.ifAccumulatedFileCount.type = IfAccumulatedFileCount
appender.rolling.strategy.action.ifAccumulatedFileCount.exceeds = 10
我会将修复文档和示例贡献回 log4j 社区。
我正在使用 log4j 2.14.1。
我想做的是有一个附加程序,它让我每天有一个日志文件,但在 N 天后删除旧日志(例如,我想最多有 10 天的日志) .
我试过使用 DirectWriteRolloverStrategy,它看起来不错并且每天创建一个日志文件,但显然无法删除旧文件,所以我的日志目录被日志填满; maxFiles 属性似乎只设置了 The maximum number of files to allow in the time period matching the file pattern
(参见 https://logging.apache.org/log4j/2.x/manual/appenders.html)。删除操作似乎只适用于 DefaultRolloverStrategy。
我的appender配置:
appender.rolling.type = RollingFile
appender.rolling.name = ROLLING
appender.rolling.filePattern = /var/log/application-%d{yyyy-MM-dd}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC}Z][%p][%C:%L] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.strategy.type = DirectWriteRolloverStrategy
appender.rolling.strategy.maxFiles = 3
是否有任何方法可以使用属性配置该目录中日志的最大数量(或最长期限)?
正如 Ralph Goers 在 log4j-user
mailing list, you need to configure a Delete Action. Search for Delete on Rollover in the RollingFileAppender
manual 中指出的那样。
因此,经过一些摆弄,并在 Volkan 和 Ralph 的帮助下,我发现 Delete 操作也适用于 DirectWriteRolloverStrategy,即使我没有提供有效的代码片段。我发现属性按照我的要求是这样的:
appender.rolling.type = RollingFile
appender.rolling.name = ROLLING
appender.rolling.filePattern = /var/log/application-%d{yyyy-MM-dd}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{yyyy-MM-dd'T'HH:mm:ss,SSS}{UTC}Z][%p][%C:%L] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.strategy.type = DirectWriteRolloverStrategy
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.condition.type = IfFileName
appender.rolling.strategy.action.basepath = /var/log
appender.rolling.strategy.action.maxdepth = 1
appender.rolling.strategy.action.condition.glob = application*.log
appender.rolling.strategy.action.ifAccumulatedFileCount.type = IfAccumulatedFileCount
appender.rolling.strategy.action.ifAccumulatedFileCount.exceeds = 10
我会将修复文档和示例贡献回 log4j 社区。