2016-12-06 5 views
1

мы ранее использовали Log4j в нашем приложении. мы знали, что некоторые из ошибок регистрируются, а не являются фактическими ошибками. Эти журналы не являются непосредственно из приложения, а из некоторых зависимых банок. Одним из вариантов было бы понизить все ошибки из указанного класса. Но мы не хотим этого делать, поскольку радиус взрыва был больше. Мы искали специально, если протоколирование msg из класса не является фактической ошибкой, тогда мы понизили ошибку до информации. Теперь мы обновились до log4j2 и пытаемся найти эквивалент этого.Эквивалент DailyRollingFileAppender от log4j в 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; 
       } 
      } 

    } 
} 

ответ

2

У вас есть несколько вариантов.

  1. Вы можете использовать Фильтр. Фильтр регулярных выражений будет отфильтровывать сообщения, которые не являются ошибками, сопоставляя их с регулярным выражением. По общему признанию, это может стать уродливым, если у вас есть журнал сообщений для фильтрации. Вы также можете использовать фильтр сценариев для соответствия требуемым сообщениям и отклонять их.
  2. Если вы хотите изменить события, вы можете обернуть свой Appender в RewriteAppender. Вам придется написать свой собственный RewritePolicy, поскольку Log4j еще не реализует ScriptRewritePolicy. Если вы предпочитаете, что, пожалуйста, откройте Jira вопрос, чтобы запросить это, и я буду смотреть на его реализацию.