SLF4J と Logback を使用する場合は、次の手順に従います。
アプリケーションで使用したい SLF4J と Logback アーティファクトをバンドルする必要があります (これは私が見つけた唯一の有効なソリューションです! 通常は SLF4J バインディングをバンドルしないことを知っています!)。また、WAR プロジェクトに weblogic.xml (WebLogic 固有の web.xml) をバンドルし、EAR プロジェクトに weblogic-application.xml (WebLogic 固有の application.xml) をバンドルします (両方を使用している場合は両方を使用し、そうでない場合は一致するものを選択します)。 . ここでも、EAR と WAR の両方が次のアーティファクトを提供する必要があります。
- slf4j-api
- ログバックコア
- ログバッククラシック
これらの xml ファイルの内容:
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">
<!-- GERMAN: http://www.torsten-horn.de/techdocs/jee-oracleweblogic.htm -->
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
</wls:weblogic-web-app>
weblogic-application.xml
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
<!-- GERMAN: http://www.torsten-horn.de/techdocs/jee-oracleweblogic.htm -->
<prefer-application-packages>
<package-name>org.slf4j.*</package-name>
<package-name>org.apache.commons.logging.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>org/slf4j/impl/StaticLoggerBinder.class</resource-name>
</prefer-application-resources>
</weblogic-application>
これらの xml ファイルを使用して、WebLogic に付属のバージョン (WAR) よりもバンドルされているバージョンを優先するように WebLogic に指示します。EAR の場合、これはパッケージ/リソース単位で実行できます。指定されたパッケージのクラスローダーの順序がより正確に変更されます。
SLF4J および Logback jar を EAR または WAR のみにバンドルするとエラーが発生するか、まったくログに記録されませんが、アーティファクトを両方にバンドルすると警告も表示されます。誰かが改善のアイデアを持っている場合は、コメントを残してください!
私が理解している限りでは、WAR が EAR にバンドルされている場合でも、EAR ファイルと WAR ファイルは WebLogic で異なるクラス ローダーを持っています。それが、このライブラリをそれらの間で共有できない理由ですよね?
Logback の構成: 実行時に logback 構成を変更できるようにするには、WebLogic クラスパスのどこかに logback.xml を配置する必要があります。多くの Web サイトを見つけて、WebLogic がドメイン ディレクトリからリソース ファイルをロードすることを教えてくれましたが、私の場合はリソース ファイルがクラスパスになかったため、サーバー起動スクリプトを介してグローバル クラスパスに追加する必要がありました (これは、すべてのドメインのログバック設定!)。繰り返しますが、改善は大歓迎です!