私はOSGi環境でLog4J2に橋渡しする必要があるcommons-loggingを使用していますので、以下のようにpom.xml
に依存パッケージexport-packageとimport-packageを追加しましたが、 Log4J2ロガーに設定されます。エラーは表示されませんが、デバッグ時にJDK14Loggerに設定されています。Log4J2がOSGi環境でロガーとして設定されていません
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>2.8.2</version>
</dependency>
<Export-Package>
org.apache.logging.log4j.*,
org.apache.commons.logging.*
</Export-Package>
<Import-Package>
!org.apache.logging.log4j.*,
!org.apache.commons.logging.*,
*;resolution:=optional
</Import-Package>
[UPDATE]
のlog4j userメーリングリストから私が原因ServiceLoaderの非モジュラー自然にそれを見つけ出すことができます。 OSGi環境のServiceLoaderのいくつかの使用法を調べて、インターフェースの実装を見いだしましたが、これがどう動くかをまだ知ることはできませんでした。上記のユーザーバンドルされている場合
は私もPAXロギングを使用して、それを試してみましたが、結果はロガーが今JclLoggerに設定されていることを除いて同じである
これは、関連する依存関係、エクスポートおよびインポートパッケージ、およびcommons-logging.propertiesとともにLog4Jと同じ方法で実装されました。それはうまくいった。今私はそれをlog4j2に変更しようとしています。 –
これは何らかの形で機能するかもしれませんが、正しくない可能性があります。 log4jランタイムをバンドルに埋め込むべきではありません。とりわけ、log4jを正しく展開する場合(例えば、pax-loggingを使用)には、1つの中央場所でロギングを構成し、実行時に変更することもできます。 –
更なる発見で質問を更新しました。ご参照ください。 –