Log4j 1.2 Bridge 更新至 2.17.2 RollingFileAppender MaxBackupIndex 问题

问题描述 投票:0回答:1

我最近使用 log4j 1.2 桥接 API 将 log4j 1.2.13 更新到 log4j 2.17.2。

我现有的 RollingFileAppender 配置如下:

log4j.appender.app=org.apache.log4j.RollingFileAppender
log4j.appender.app.layout=org.apache.log4j.PatternLayout
log4j.appender.app.layout.ConversionPattern=%d %-5p [%-4t] %c{1}.%M(%L) | %m%n
log4j.appender.app.File=${applicationLogs}/app.log
log4j.appender.app.Encoding=UTF-8
log4j.appender.app.MaxFileSize=10KB
log4j.appender.app.MaxBackupIndex=5

根据 Apache log4j 文档:如果记录到名为

file.log
的文件,当文件大小达到指定的大小限制时,内容将存档在名为
file.log.1
的文件中,并且
file.log
会被截断。当第二次达到大小限制时,
file.log.1
被重命名为
file.log.2
file.log
中的内容将存档到
file.log.1
,并且
file.log
会被截断。

但是库更新后,内容会以串行方式存档:当第二次达到大小限制时,

file.log.1
不会重命名为
file.log.2
;相反,
file.log
中的内容会存档到
file.log.2
,并且
file.log
会被截断。

log4j log4j2
1个回答
2
投票

这显然是

log4j-1.2-api
中的一个错误(我将其报告为 apache/logging-log4j2#1650)。

编辑: 该错误已在版本

2.21.0
中修复。

已弃用的解决方法:

您可以通过切换到 Log4j 2.x 配置格式(参见 文档)并在

fileIndex="min"
上设置
DefaultRolloverStrategy
来解决此问题。

1.x 配置的 2.x 等效项将如下所示:

<RollingFile name="app"
             fileName="${sys:applicationLogs}/app.log"
             filePattern="${sys:applicationLogs}/app.log.%i">
    <PatternLayout charset="UTF-8"
                   pattern="%d %-5p [%-4t] %c{1}.%M(%L) | %m%n"/>
    <SizeBasedTriggeringPolicy size="10KB"/>
    <DefaultRolloverStrategy fileIndex="min" max="5"/>
</RollingFile>
© www.soinside.com 2019 - 2024. All rights reserved.