3

WebLogic 12C への集中ログを構成したいと考えています。ビジネス要件に従って、実稼働環境で Syslog を使用する必要があり、開発者およびテスト環境でカスタム (ファイル、コンソール ログなど) を提供する必要があります。また、ドメイン内のアプリケーションごとに 1 つの集中ログ構成のみを処理したいと考えています。アプリケーションは SLF4J API を使用します。Glassfish 3.1 と WebLogic 10.3.5 では、Logback または Log4J ブリッジとその実装をドメイン lib に配置して構成すると、うまく機能します。しかし、WebLogic 12C では多くの問題に遭遇しました。主な問題は、WL が既にモジュール間の SLF4J バインディングを含んでいることです (そして、WL を変更したくありませんか?)。そのため、2 番目のバインドを配置すると、SLF4J はそれを初期化できず、デフォルトの JUL ロガーを使用します。私' また、WL 管理コンソールを使用して Log4J ロガーを構成しようとしましたが、サーバー メッセージのみが Log4J ロガーに送信され、アプリケーションのメッセージは引き続き JUL に送信されます。(http://docs.oracle.com/cd/E24329_01/web.1211/e24428/config_logs.htm#i1011558、https://forums.oracle.com/forums/thread.jspa?threadID=1037672 ) _ _

では、WebLogic12C ドメインで Log4J または Logback (または上記の要件を満たすその他のソリューション) 構成を 1 つだけ維持するにはどうすればよいでしょうか?

助けてくれてありがとう!

4

1 に答える 1

5

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 がドメイン ディレクトリからリソース ファイルをロードすることを教えてくれましたが、私の場合はリソース ファイルがクラスパスになかったため、サーバー起動スクリプトを介してグローバル クラスパスに追加する必要がありました (これは、すべてのドメインのログバック設定!)。繰り返しますが、改善は大歓迎です!

于 2013-04-26T06:59:32.377 に答える