logback-core 1.0.13
私のプロジェクトは、SLF4J API (1.7.5) とその実装 (および)として logback ライブラリを含む EAR ファイルとしてパックされていますlogback-classic 1.0.13
。
私が(以前)プロジェクトをデプロイすると、SLF4J の LoggerFactory は logback をバインド可能なものとして検出し、正しいロガー (つまり logback) が使用されます。
activemq-rar-5.8.0.rar
これで、自分の EAR ファイルの前にデプロイされるリソース コネクタ ( ) ができました (EAR ファイルには RAR が必要なため)。残念ながら、この RAR には独自の SLF4J 実装が含まれています ( slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
log4j-1.2.17.jar
)。RAR ファイルは log4j 実装を使用します。
EAR ファイルをデプロイすると、アプリケーションのコード内の LoggerFactory が突然 log4j 実装 ( org.slf4j.impl.Log4jLoggerAdapter
) を使用します。クラスパスが RAR から分離されていると予想していたにもかかわらずです。
これは当てはまらないようです - では、何が間違っているのでしょうか (RAR は log4j を使用する必要があり、EAR は logback を使用する必要があります)。
更新 1: 1 人ではないように見えますが、残念ながら回答がありません..
更新 2:
この表によると、GlassFish は EAR/WAR ライブラリ (最後にロードされるライブラリ) の前にコネクタ モジュールをロードします。
更新 3:
私はなんとか「バインディング」を修正しました: GlassFish のフォルダー内に とslf4j-api-1.7.5.jar
logback 実装 (logback-core-1.0.13.jar
およびlogback-classic-1.0.13.jar
)を配置するとdomains/<myDomain>/lib
、logback がログ実装として使用されます (更新 2 を参照してください - 「共通クラスローダー」は「コネクター クラスローダー」の前に来ます)。
残念ながら、構成ファイルは WAR/EAR 内にあるため、もう見つかりません。これは、後で別のクラスローダー (「アーカイブ クラスローダー」) によってロードされます。
したがって、ログバック構成ファイルをEAR / WAR内に保持したいので(すべてのアプリケーションが異なる構成を使用するため)、これは実際には解決策ではありません。
敬具
愚かな羊