2011-01-24 6 views
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; 
    } 

}); 

誰もがこのログ・エントリを作成したクラスを見つける方法を知っていますか?このメッセージをフィルタリングする別の方法はありますか?

EDIT:...

答えて

4

次のフラグを指定してjavaプログラムを実行するだけで済みます。-Djava.util.logging.config.file=<mylogging.properties>ここで、mylogging.propertiesは、コードではなく次の内容のファイルです。 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

+0

これは定義したフィルタリングメソッドを呼び出さない 「java -Djava.util.logging.config.file = 」でプログラムを実行していることを確認してください。これは、特定のロガーの最小ログレベルをWARNに上げて、 "? –

+0

はい、私は確信しています... – marekventur

0

を私もLogger.getLogger("com.sun.xml.internal.ws.model.RuntimeModeler")を試してみましたが、それはまだ動作していないのログエントリは、それがこのログを生成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

1

編集から

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

クレメント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をGoogle-INGのあなたはLoggingDomain定数を過ぎコピーと-できhereをリードして使用しています。

ただし、このソリューションは、Sunの「プライベート」ネームスペースと実装に依存するため、すべてのJREで動作するわけではありません。

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 

次に、作成したファイルを正しいプロジェクトソースフォルダに移動します。

関連する問題