2014-09-08 5 views
1

Я пишу пользовательский дескриптор сокета для Log4J, который прикрепляется во время выполнения. Код, который я до сих пор, как показано ниже,log4j - как программно исключить некоторые классы из ведения журнала

Logger rootLogger = Logger.getRootLogger(); 
SocketAppender socketAppender = new SocketAppender(server, port); 
socketAppender.setReconnectionDelay(60000); 
socketAppender.setThreshold(Level.DEBUG); 
socketAppender.setName("server-socket"); 
rootLogger.addAppender(socketAppender); 

где сервер & порт определен правильно. Я использую Struts2, поэтому я получаю журнал бесполезных журналов (для меня) из таких классов, как freemarker.beans и freemarker.cache. Как отфильтровать эти классы от входа в Socket Appender выше?

Я пробовал использовать фильтры, но он, похоже, не работает. Если кто-то может указать мне в правильном направлении, это будет очень полезно. Ура!

+0

Вы хотите исключить этих регистраторов только из этого одного приложения или вообще? – mp911de

ответ

1

Хорошо .. Я нашел ответ. Я неправильно использовал классы фильтра. Вместо DENY я отправлял НЕЙТРАЛЬНО. Ниже код теперь работает хорошо для меня,

 SocketAppender socketAppender = new SocketAppender(server, port); 
     socketAppender.setReconnectionDelay(60000); 
     socketAppender.setThreshold(Level.DEBUG); 
     socketAppender.setName("server-socket"); 
     socketAppender.addFilter(new Filter() { 
      @Override 
      public int decide(LoggingEvent loggingEvent) 
      { 
       if(ignoreLogsFromClasses.contains(loggingEvent.categoryName)) 
       { 
        return -1; 
       } 
       return 0; 
      } 
     }); 
     rootLogger.addAppender(socketAppender); 

где ignoreLogsFromClasses является набор, который содержит классы, которые должны быть проигнорированы.

Смежные вопросы