从Logger中过滤掉不需要的INFO消息

时间:2011-01-24 11:44:05

标签: java soap java.util.logging

我正在使用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 个答案:

答案 0 :(得分: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");

来自Constants

  public static final java.lang.String LoggingDomain = "javax.enterprise.resource.webservices.jaxws";

答案 1 :(得分:1)

编辑:Clement 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");

Google {ing com.sun.xml.ws.util.Constants引导here,您可以复制LoggingDomain常量。

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

答案 2 :(得分:0)

日志条目似乎表明它是生成此日志消息的com.sun.xml.internal.ws.model.RuntimeModeler类。您应该可以通过raisong此记录器的级别来过滤它。

答案 3 :(得分: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

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