私が取り組んでいるプロジェクトは、いくつかのオープンソースフレームワークを使用しています。各フレームワークは、いくつかのロギングライブラリを使用します。私の問題は、最終的な成果物にlog4j(2つの異なるバージョン)、ログバック付きのslf4j、そしてもちろん一般的なログが含まれていることです。ライブラリの数を減らす方法を探しています。mavenのpomファイルでログライブラリを除外し、ログメッセージを「インターセプト」するようにslf4jを構成できますか?
3 に答える
Slf4jのマニュアルには、これを行う方法に関する情報がいくつかあります。
あなたが探しているのは、すべてのMaven依存関係から除外log4j
し、代わりにとパッケージをロードすることだと思います。これらはとを置き換えるように設計されており、、、、およびフレンズを置き換えるための適切なクラスとクラスが含まれています。これによってライブラリが削減されることはありませんが、すべてのログ出力がに渡されます。これらのクラスの使用法を(明らかに)取り除かない限り、ラッパーまたはオリジナルのいずれかへの依存を減らすことはできません。commons-logging
log4j-over-slf4j
jcl-over-slf4j
log4j
commons-logging
org.apache.log4j
org.apache.commons.logging
Logger
Log
sl4fj
slf4j
代わりに1つのロギングパッケージを使用することを検討している場合、それを行う正しい方法は、代わりにcommons-logging
、ロギングデリゲーターとして設計されたuseに切り替えてから、slf4j-jcl
にフックするパッケージを使用することcommons-logging
です。
後世のために、を必要とする依存関係ごとに、この方法で依存関係を除外しますlog4j
。
<dependency>
<groupId>.../groupId>
<artifactId>...</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
編集して、質問をもう少し詳しく読んでください。slf4j は、非 slf4j プロジェクト用のレガシー ブリッジを追加します。ただし、ランタイム パスに依存する jar を提供する必要があります。他の人の仕事を繰り返さないことの代償です。
つまり、jvm で本質的にリンクする必要がある完全修飾シンボルがすべてあると考えてください。依存ライブラリを含めて、いくつかのストレートブードゥーに他なりません。
pax-loggingを見てください。考えられるほぼすべてのロギング フレームワーク インターフェイス (適切なパッケージ名やクラスなど)が組み込まれていますが、それらは実装されていません。代わりに、これらのファサードを log4j バックエンドにリンクします。
つまり、プロジェクトは引き続き元のロギング フレームワークを使用しますが、これらは (透過的に) log4j に引き渡されます。このようにして、ログ出力は一貫しており、1 か所でのみ構成されます。