log4j - как программно исключить некоторые классы из логирования

1

Я пишу пользовательский дескриптор сокета для 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
    Вы хотите исключить эти регистраторы только из этого одного приложения или вообще?
Теги:
logging
log4j
struts2

1 ответ

1
Лучший ответ

Ну.. Я нашел ответ. Я неправильно использовал классы Filter. Вместо 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 - это набор, содержащий классы, которые следует игнорировать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню