2

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 回答 4

4

您应该能够使用以下标志运行 java 程序:-Djava.util.logging.config.file=<mylogging.properties>其中 mylogging.properties 是具有以下内容的文件,而不是在代码中执行。

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

来自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";
于 2011-01-24T11:56:31.703 回答
1

编辑:克莱门特 P 早在我之前就回答了这个问题;所有的大拇指都应该给他!

我在这里保留我的答案,因为它使用了另一种方式。


我现在已经自己解决了。简而言之,这是解决方案:

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

如果有人感兴趣,这就是我找到它的方式:

com.sun.xml.internal.ws.model.RuntimeModeler中的方法 getExceptionBeanClass负责消息。它使用一个静态Logger实例化的函数

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

在此处搜索com.sun.xml.ws.util.Constants潜在客户,您可以在其中复制并粘贴常量。LoggingDomain

但请记住:此解决方案不适用于每个 JRE,因为它依赖于 Sun 的“私有”命名空间和实现。

于 2011-01-24T17:25:09.880 回答
0

日志条目似乎表明生成此日志消息的是 com.sun.xml.internal.ws.model.RuntimeModeler 类。您应该能够通过提高此记录器的级别来将其过滤掉。

于 2011-01-24T11:51:49.627 回答
0

或者,您可以只创建缺少的类。实际上,这是我在创建 Web 服务时遵循的标准程序。

如果您创建这个类(即de.wi08e.myhome.frontend.jaxws.NotLoggedInBean),那么它将只使用现有的类,而不是尝试在运行时创建它。

实际上,您甚至不必自己创建这些类。您可以使用 wsgen 工具生成它们。wsgen.exe是 java jdk 的一部分。因此,您可以从命令行运行它。

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

接下来将创建的文件移动到正确的项目源文件夹。

于 2014-02-21T15:43:30.587 回答