14

ロギング ファサードとして slf4j を使用して新しいシステムを構築しています。新しく Weblogic 12c にデプロイすると、コンソール ログに次のエラーが見つかりました。

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]

Google で調べたところ、これは単なる警告であることがわかりました。slf4j は最初に見つかったロガー (この場合は weblogic のシステム ロガー フレームワーク) をバインドします。WAR ファイルでロギング フレームワークにバインドする方法はありますか? <prefer-web-inf-classes> が weblogic.xml に含まれていても役に立たない

4

4 に答える 4

34

StaticLoggerBinder.classSLF4J は をクラスとしてではなくリソースとして検索するため、フィルタリングはクラスではなくリソースに対して実行する必要があります。

これも weblogic-application.xml に含めます。

<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>

System ClassLoader 内のロガーの代わりにロガーが使用されます。

于 2012-10-05T10:25:16.760 に答える
4

WAR ファイルの場合は、 thisおよびthisの投稿で説明されているように使用prefer-application-packagesする必要があります。weblogic.xml

あなたの場合、それは次のようになります

<?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>
于 2012-05-30T15:51:47.003 に答える
3

この問題も発生しており、Log4J を使用してログを構成する必要があるため、これが問題でした。ただし、使用prefer-application-packagesはこれまでのところ機能しているようです。つまり、次のように EARweblogic-application.xmlのフォルダーにファイルを配置します。META-INF

<?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>

(指定されたxmlnsは古いものですが、動作します。必要に応じて更新できます。私は私たちのものを取り、無関係な部分を削除しました)。

前述の警告はまだありますが、必要に応じて Log4J を使用しています。実際、ログの次の行に指定されている URLを見ると(ここでは省略されています) 、次のように表示されます。

SLF4J によって発行される警告は、まさに警告です。SLF4J は、クラス パスで最初に見つかったフレームワークに引き続きバインドします。

したがって、ロードには通常のクラスローディングメカニズムを使用していると思いますが、org.slf4j.impl.StaticLoggerBinder実際にはEAR内のものを優先するように構成しました(つまり、クラスパスの最初にします)。

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

于 2012-05-30T14:48:23.553 に答える
0

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

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

それ以外の場合は、WAR の代わりにEARを構築して、こちらの推奨事項に従ってください

于 2012-03-16T16:00:17.130 に答える