2011-01-24 51 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 

接下來將創建的文件移動到正確的項目源文件夾。