2011-01-24 52 views
2

我正在使用java.util.logging登录我的Java应用程序。我还使用javax.xml.ws.Endpoint来发布SOAP接口。从记录器中过滤不需要的INFO消息

在我加入越来越多的例外,所有在启动时对数项类似这样的露面时间:

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

您应该可以使用以下标志运行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"; 
+0

不起作用:-(“com.sun.xml.internal.ws.model.RuntimeModeler”似乎是错误的类名,因为过滤方法从未被调用过。 – marekventur 2011-01-24 12:01:13

0

日志条目似乎表明,它是com.sun.xml.internal.ws.model.RuntimeModeler类生成此日志信息。你应该能够通过提升这个记录器的级别来过滤掉它。

+0

仍然不工作:Logger loggerInfo = Logger.getLogger(“com.sun.xml.internal.ws.model.RuntimeModeler”); loggerInfo.setLevel(Level.WARNING); loggerInfo.setFilter(...); – marekventur 2011-01-24 11:57:37

1

编辑:克莱门特P右长回答了这个问题在我面前;所有的赞赏都应该归功于他!

我在这里保留我的答案,因为它使用稍微其他的方式。


我现在自己解决了。总之,这是解决方案:

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

如果任何人的兴趣,这是我发现:

的方法getExceptionBeanClass在com.sun.xml.internal.ws.model.RuntimeModeler负责的消息。它采用功能

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

谷歌,荷兰国际集团为com.sun.xml.ws.util.Constants导致here在那里你可以复制和过去的LoggingDomain不断实例化一个静态Logger

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

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 

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