从log4j 1.2迁移到log4j 2 - 如何获取所有appender列表和滚动文件策略

use*_*983 9 java logging log4j log4j2

我正在将我的应用程序从log4j 1.2迁移到log4j 2.0

我有现有的代码:

Enumeration appenders = logger.getAllAppenders();
.
.
.
fileBackupIndex = rollingFileAppender.getMaxBackupIndex();
Run Code Online (Sandbox Code Playgroud)

在log4j 2.0中我找不到替换上面java代码的方法.如何获取所有appender的列表以及如何以编程方式获取为RollingFile appender定义的最大值?

Rem*_*pma 9

使用log4j2,API和CORE之间存在分离.这允许团队在不破坏客户端代码的情况下对实现进行更改.

因此,如果您的代码依赖于实现细节,请注意将来可能会更改并且您的代码可能会中断.

也就是说,你可以得到这样的appender地图:

Logger logger = LogManager.getLogger();
Map<String, Appender> appenderMap = 
        ((org.apache.logging.log4j.core.Logger) logger).getAppenders();
Run Code Online (Sandbox Code Playgroud)

您可以遍历地图,直到找到RollingFileAppender.从这一点来看,它变得非常丑陋......您想要的信息都在私有字段中,因此您需要使用反射来执行以下操作:

  • 获取fileAppender的"manager"字段并将其转换为RollingFileManager
  • 获取经理的"策略"字段并将其转换为DefaultRolloverStrategy
  • 获取defaultRolloverStrategy的"maxIndex"字段

这显然是非常脆弱的...如果你真的需要这个,你可以在log4j-dev邮件列表上请求这个功能或创建一个JIRA票.获得此功能的最快方法是使用功能请求提供补丁.

  • Gary 修改了 SVN 主干代码以提供触发策略和翻转策略的访问器 (2认同)