Я пишу пользовательский дескриптор сокета для 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 выше?
Я пытался использовать фильтры, но, похоже, он не работает. Если кто-то может указать мне в правильном направлении, это будет очень полезно. Ура!
Ну.. Я нашел ответ. Я неправильно использовал классы 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 - это набор, содержащий классы, которые следует игнорировать.