使用slf4j-log4j12与log4j1.2.17时初始化陷入循环问题求助
问题原因分析
- 配置项冲突:你当前使用的
org.apache.log4j.rolling.RollingFileAppender属于log4j-extras扩展组件,该组件的活动日志文件路径仅需要通过rollingPolicy.ActiveFileName参数指定即可,你额外配置了log4j.appender.infoFileLogger.File=test_info.log,两个重复的文件路径配置会导致Appender初始化时反复触发文件重加载逻辑。 - 滚动阈值触发死循环:你设置的
MaxFileSize=10000(约10KB)阈值过小,如果当前工作目录下已经存在大小超过10KB的历史test_info.log文件,Appender初始化完成后会立刻触发滚动操作,滚动完成后因为重复配置的File属性会再次调用setFile方法加载文件,重新判断文件大小超过阈值后又会触发滚动,最终形成无限循环。 - 版本兼容问题:slf4j-log4j12:1.7.5、log4j:1.2.17和低版本log4j-extras的滚动组件存在已知的初始化逻辑冲突,扩展RollingFileAppender不会自动忽略重复的File配置,进一步放大了上述问题。
修复方案
- 删除配置中
log4j.appender.infoFileLogger.File=test_info.log这一行,仅保留rollingPolicy.ActiveFileName指定活动日志文件名即可,修改后重启应用即可解决循环问题。 - 清理当前工作目录下的历史日志文件,避免启动时立刻触发滚动。
- 如果你不想使用log4j-extras的扩展组件,也可以切换为log4j原生的RollingFileAppender,参考配置如下:
log4j.rootLogger= INFO, infoFileLogger #INFO log4j.appender.infoFileLogger=org.apache.log4j.RollingFileAppender log4j.appender.infoFileLogger.File=test_info.log log4j.appender.infoFileLogger.MaxFileSize=10KB log4j.appender.infoFileLogger.MaxBackupIndex=5 log4j.appender.infoFileLogger.layout=org.apache.log4j.PatternLayout log4j.appender.infoFileLogger.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %c - %m%n log4j.appender.infoFileLogger.Threshold=INFO
内容的提问来源于stack exchange,提问作者Calypso
相关产品推荐
相关产品推荐

