log4j2中来自log4j的DailyRollingFileAppender的等价物

时间:2016-12-06 19:40:25

标签: logging log4j log4j2

我们之前在我们的应用程序中使用了Log4j。我们知道记录的一些错误不是实际错误。这些日志不是直接来自应用程序,而是来自某些依赖的jar。一种选择是降级指定类的所有错误。但是我们不想这样做,因为爆炸半径更大。我们特意查找了类中的日志消息是否为实际错误,然后我们将错误降级为info。 现在我们已经升级到log4j2并且正在尝试找到与此相当的内容。

这是log4j中的逻辑

    TestRollingFileAppender extends DailyRollingFileAppender {
     @Override
        protected void subAppend(LoggingEvent event) {
     if (event.getLevel().isGreaterOrEqual(Level.WARN)) {
           //stringsToDowngrade reads from properties file and gets set of msgs that can be downgraded
                String[] testSubstrings = stringsToDowngrade(event.getLogger());
      for (String testString : testSubstrings) {
                if (event.getMessage() != null &&
                        StringUtils.isNotBlank(testString) &&
                        event.getMessage().toString().contains(testString)) {

                   event = new LoggingEvent(...,LEVEL.WARN,...);

                 break;
                }
            }

    }
}

1 个答案:

答案 0 :(得分:2)

你有几个选择。

  1. 您可以使用过滤器。正则表达式过滤器会通过匹配正则表达式来过滤掉非错误的消息。不可否认,如果您有要过滤的消息日志,这可能会变得很难看。您还可以使用脚本过滤器来匹配所需的邮件并拒绝它们。
  2. 如果要修改事件,则可以将Appender包装在RewriteAppender中。您必须编写自己的自定义RewritePolicy,因为Log4j尚未实现ScriptRewritePolicy。如果您愿意,请打开一个Jira问题来请求,我会考虑实施它。