2012-03-16 6 views
11

slf4jをロギングファサードとして使用して新しいシステムを構築しています。新規のWeblogic 12cは上の展開する場合、我々はコンソールログにこのエラーを見つけました: Weblogic 12cがシステムのslf4jバインディングを使用しないようにする

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/Oracle/Middleware2/modules/org.slf4j.jdk14_1.6.1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [zip:/opt/Oracle/Middleware2/user_projects/domains/m3/servers/AdminServer/tmp/_WL_user/test/t030q4/war/WEB-INF/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class] 

はグーグルの後、我々は、これは単なる警告であることがわかった

、SLF4Jはまず、この場合、WebLogicのシステム・ロガー・フレームワークであるロガーを見つけ結合します。 WARファイルのログフレームワークにバインドする方法はありますか? < prefer-web-inf-classes >をweblogic.xmlに入れても助けにならない

答えて

0

SLF4Jはクラスパスの自己発見に基づいているため、独自のバージョンを強制する方法はないと思います。

WebLogicの管理権限がある場合、最も簡単な解決策は、WebLogicインストールフォルダのファイルを更新して、SLF4JバージョンのWebLogicを1.6.4にアップグレードすることです。

そうでなければ、私ははWARでは動作しません-WEB-INF-クラスを好むなら、それは動作しないだろうが、EARの代わりに、WARを構築し、勧告hereを追跡しようとすることができます。

+0

ええ、「システムライブラリにバインドする代わりに、私が提供するログライブラリにslf4jバインドロガーを作成する」という意味です。 slf4jの文書によると、slf4jが複数のバインド可能なロガーを見つけたら、常にシステムのslf44バインディングである最初のロガーにバインドされます。 – dhchen

2

私たちもこの問題を抱えていました.Log4Jを使用してログを設定する必要があるため、これが問題でした。しかし、prefer-application-packages使用することはすなわち、以下でEARのMETA-INFフォルダにweblogic-application.xmlファイルを入れて、これまでに動作しているようです:

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-application.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" > 
    <prefer-application-packages> 
     <package-name>org.slf4j</package-name> 
    </prefer-application-packages> 
</weblogic-application> 

(OK指定のxmlnsは古いものですが、それは動作しますが、あなたはそれを更新することができます。あなたが望むならば、私はちょうど私たちを取って、無関係な部分を削除しました)。

上記の警告はありますが、必要に応じてLog4Jを使用します。あなたは(質問にここでは省略)ログにthe URL specified on the next lineを見れば実際には、それは言う:

SLF4Jから放出された警告は、警告だけです。 SLF4Jはまだとバインドします。これは、クラスパスで最初に見つかるフレームワークです。

だから私はそれはまだ私達が実際に私たちのEARに1を好むように設定ロードorg.slf4j.impl.StaticLoggerBinderための通常のクラス・ローディング機構を、(すなわち、クラスパス上のそれが最初にする)を使用していますね。

ただし、警告は残りますが動作します。警告を修正するのは良いことですが、WebLogicの提供されたライブラリを変更しなければ、おそらく不可能です。

4

WARファイルの場合は、thisthis投稿のようにweblogic.xmlprefer-application-packagesを使用する必要があります。 SLF4Jは、リソースとしてではなく、クラスとしてStaticLoggerBinder.classを探すため

あなたのケースでは、

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> 
    <wls:container-descriptor> 
     <wls:prefer-application-packages> 
      <wls:package-name>org.slf4j</wls:package-name> 
     </wls:prefer-application-packages> 
    </wls:container-descriptor> 
</wls:weblogic-web-app> 
27

フィルタリングは、クラスではなく、リソース上で行われるべきではありませんようになります。

これをweblogicアプリケーションに含めます。

<wls:prefer-application-packages> 
    <wls:package-name>org.slf4j.*</wls:package-name> 
    <wls:package-name>org.apache.commons.*</wls:package-name> 
</wls:prefer-application-packages> 

<wls:prefer-application-resources> 
    <wls:resource-name>org/slf4j/impl/StaticLoggerBinder.class</wls:resource-name> 
</wls:prefer-application-resources> 

システムクラスローダーの代わりにロガーが使用されます。

+3

org.apacheです。 * SLF4Jを作成するために必要な項目は?もしそうなら、なぜですか? –

+0

遅くなりましたが、com.apache.commons.logging。* – HRgiger

関連する問題