2017-07-04 17 views
0

私は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に設定されていることを除いて同じである

答えて

0

、これは正しくありません。 。 ユーザバンドルでは、単にcommons logging APIを使用し、mavenバンドルプラグインの設定を変更しないでください。

これで、Commons Logging API用のImport-Packageステートメントが作成されますが、必要なlog4j用のステートメントは作成されません。

これで、実行時に適切なロギングフレームワークをインストールする必要があります。私は、pax-loggingがOSGi互換の方法でコモンズのログを処理できることを知っています。多分普通のlog4j2も動作しますが、わかりません。

+0

これは、関連する依存関係、エクスポートおよびインポートパッケージ、およびcommons-logging.propertiesとともにLog4Jと同じ方法で実装されました。それはうまくいった。今私はそれをlog4j2に変更しようとしています。 –

+0

これは何らかの形で機能するかもしれませんが、正しくない可能性があります。 log4jランタイムをバンドルに埋め込むべきではありません。とりわけ、log4jを正しく展開する場合(例えば、pax-loggingを使用)には、1つの中央場所でロギングを構成し、実行時に変更することもできます。 –

+0

更なる発見で質問を更新しました。ご参照ください。 –

関連する問題