Фильтр нежелательных INFO-сообщений от Logger - PullRequest
2 голосов
/ 24 января 2011

Я использую java.util.logging для входа в приложение Java. Я также использую javax.xml.ws.Endpoint для публикации SOAP-интерфейса.

Со временем я добавил все больше и больше исключений, которые все появляются при запуске с такой записью в журнале:

Jan 24, 2011 12:29:27 PM com.sun.xml.internal.ws.model.RuntimeModeler getExceptionBeanClass
INFO: Dynamically creating exception bean Class de.wi08e.myhome.frontend.jaxws.NotLoggedInBean

Я попробовал следующий фильтр, чтобы заблокировать их, но я не уверен, какой класс получить с getLogger:

/* Filter ExceptionBeanClass logs */
Logger loggerInfo = Logger.getLogger("javax.xml.ws.Endpoint");
loggerInfo.setFilter(new Filter() {

    @Override
    public boolean isLoggable(LogRecord l) {
        System.out.println(l.getMessage());
        if (l.getMessage().startsWith("Dynamically creating exception bean Class"))
            return false;
        return true;
    }

});

Кто-нибудь знает, как узнать, какой класс создает эти записи в журнале? Есть ли другой способ отфильтровать эти нервные сообщения?

РЕДАКТИРОВАТЬ: Я также пытался Logger.getLogger("com.sun.xml.internal.ws.model.RuntimeModeler"), но он все еще не работает ...

Ответы [ 4 ]

4 голосов
/ 24 января 2011

Вы можете просто запустить java-программу со следующим флагом: -Djava.util.logging.config.file=<mylogging.properties> где mylogging.properties - это файл со следующим содержимым вместо того, чтобы делать это в коде.

javax.enterprise.resource.webservices.jaxws.server.level = WARN

From http://www.docjar.com/html/api/com/sun/xml/internal/ws/model/RuntimeModeler.java.html

  186       private static final Logger logger =
  187           Logger.getLogger(
  188               com.sun.xml.internal.ws.util.Constants.LoggingDomain + ".server");

и от констант

  public static final java.lang.String LoggingDomain = "javax.enterprise.resource.webservices.jaxws";
1 голос
/ 24 января 2011

Редактировать: Клемент Р ответил на этот вопрос задолго до меня; все большие пальцы должны идти к нему!

Я держу свой ответ здесь, потому что он использует немного другой способ.


Я сейчас решил это сам. Одним словом, это решение:

Logger.getLogger("javax.enterprise.resource.webservices.jaxws.server").setLevel(Level.WARNING);

Если кому-то интересно, вот как я его нашел:

Метод getExceptionBeanClass в com.sun.xml.internal.ws.model.RuntimeModeler отвечает за сообщения. Он использует статический Logger, инстанцированный функцией

Logger.getLogger(com.sun.xml.ws.util.Constants.LoggingDomain + ".server");

Google-ing для com.sun.xml.ws.util.Constants приводит здесь , где вы можете скопировать и вставить константу LoggingDomain.

Но имейте в виду: это решение не будет работать на каждой JRE, потому что оно зависит от «частного» пространства имен и реализации Sun.

0 голосов
/ 21 февраля 2014

Кроме того, вы можете просто создать отсутствующий класс.Собственно, это стандартная процедура, которой я следую при создании веб-сервисов.

Если вы создадите этот класс (т. Е. de.wi08e.myhome.frontend.jaxws.NotLoggedInBean ), тогда он просто будет использоватьсуществующий класс, не пытаясь создать его во время выполнения.

На самом деле вам даже не нужно создавать эти классы самостоятельно.Вы можете сгенерировать их с помощью инструмента wsgen. wsgen.exe является частью java jdk.Итак, вы можете просто запустить это из командной строки.

wsgen.exe -verbose -keep -cp . de.wi08e.myhome.frontend.WebService -d source

Затем переместите созданные файлы в правильную исходную папку проекта.

0 голосов
/ 24 января 2011

Кажется, что запись в журнале указывает, что это класс com.sun.xml.internal.ws.model.RuntimeModeler, который генерирует это сообщение журнала. Вы должны быть в состоянии отфильтровать его, повысив уровень для этого регистратора.

...