2011-06-20 5 views
4

SLF4Jは、複数のバインディング文句を言うが、それらはまったく同じに見える:SLF4J複製

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [zip:C:/bea_domains/my_service_domain/servers/AdminServer/tmp/_WL_user/my-shared-app-lib/obaz3z/APP-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [zip:C:/bea_domains/my_service_domain/servers/AdminServer/tmp/_WL_user/my-shared-app-lib/obaz3z/APP-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

この警告を取り除くためにどのような方法がありますか?それの理由は何でしょうか?

答えて

5

あなたが報告した問題と同じ私に見えるbug 138の議論が現在進行中です。ディスカッションによると、「マニフェスト内の複数のクラスパスで実際に問題が発生しました。リストされたWLSをバインドしたEJB jar以上のものがあれば、それらの完全なリストを提供していました。クラスが同じであっても、ClassLoader WLSでの行動。 "この警告を本当に削除したいのであれば(致命的ではありませんが)、バグに添付ファイルがあります。おそらくslf4jにパッチを貼ることができます。

0

別にJasonwの答えで説明した複数のクラスパスに問題から、この問題は、モックフレームワークPowerMockによって発生することができます。

PowerMockは独自のクラスローダー(MockClassLoader)を使用します。これは、独自のメカニズムを使用して親クラスローダに委任します。これにより、ClassLoader.getResources()が同じリソースを2回返すこともあり、警告がトリガーされます。

これは、PowerMock issue 380に記載されている変更が原因と考えられます。

SLF4Jの#138の修正(上記リンク)もこの問題を解決していますので、SLF4J 1.6.2以降ではこれ以上発生しません。