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

时间:2014-01-23 09:10:18

标签: java logging log4j log4j2

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

我有现有代码:

Enumeration appenders = logger.getAllAppenders();
.
.
.
fileBackupIndex = rollingFileAppender.getMaxBackupIndex();

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

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

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

答案 1 :(得分:1)

我添加了

的访问者
  • minIndex,maxIndex和compressionLevel。
  • triggeringPolicy和rolloverStrategy。

请参阅我们的SVN主干。