私のプロジェクトはSLF4J API(1.7.5)とその実装としてのログバックライブラリ(logback-core 1.0.13
とlogback-classic 1.0.13
)を含むEARファイルとしてパッケージ化されています。SLF4J - 同じアプリケーションサーバー上の他のアプリケーションによってバインディングが上書きされる
私のプロジェクトを配備するとき、SLF4JのLoggerFactoryは可能なバインディングとしてログバックを見つけ、正しいロガー(ログバック)が使用されます。
私は自分のEARファイル(EARファイルにはRARが必要)の前に配備されているリソースコネクタ(activemq-rar-5.8.0.rar
)を持っています。残念ながら、このRARには独自のSLF4J実装(slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
log4j-1.2.17.jar
)が含まれています。 RARファイルはlog4j実装を使用します。
EARファイルを配備すると、クラスパスがRARから分離されることが予想されていましたが、アプリケーションのコード内にLoggerFactoryが突然log4j実装(org.slf4j.impl.Log4jLoggerAdapter
)を使用します。
これはそうではないようです - 私は間違っています(RARはlog4jを使用すべきです、私のEARはログバックを使用すべきです)?
アップデート1: It doesn't look as if I am aloneが、残念ながら答えは見つからない。..
アップデート2:
this表によると、GlassFishのは、前にコネクタモジュールをロードしますEAR/WAR libs(ロードされる最後のlibです)。
アップデート3:私はGlassFishの中domains/<myDomain>/lib
フォルダ内slf4j-api-1.7.5.jar
とlogbackの実装(logback-core-1.0.13.jar
とlogback-classic-1.0.13.jar
)を入れた場合は、logbackが使用されます:
私は "結合" を修正するために管理(更新2 - 「共通クラスローダー」は「コネクター・クラスローダー」の前にあります)を参照してください。
残念ながら、私の設定ファイルはWAR/EARの中にあるので、もう見つけられません。後で別のクラスローダー( "Archive Classloader")によってロードされます。
EAR/WARの中にログバック設定ファイルを保存したいので(これはすべてのアプリケーションが別の設定を使用しているので)、これは本当に私にとっては解決策ではありません。
種類はstupidSheep
なぜlog4jを依存関係にパッケージ化するのですか?コンテナはロギング設定を見てインプラントを提供できませんか? – roby
私は自分自身でlog4jを依存関係としてパックしません。これは、Apache ActiveMQ(http://activemq.apache.org/maven/5.8.0/activemq-rar/dependencies.html)によって証明されたRAR(リソースアダプタ)にあります。これらのJARファイルは、いくつかのログ構成ファイルとともにRAR内にあります。 – stupidSheep