2

特定のプロジェクトが使用するロギングシステムを決定する方法は?

log4jslf4jおよびの兆候がありlogbackます。アクティブな構成ファイルのようですlog4j.properties。ロガーはクラスで作成されます

private static Logger log = LoggerFactory.getLogger(MyClass.class);

ロガーの完全なタイプは でorg.slf4j.Logger、ファクトリーのタイプは ですorg.slf4j.LoggerFactory

しかし、瓶logback-core-0.9.26.jarlogback-classic-0.9.26.jar.

その他の jar はslf4j-log4j12-1.6.1.jarslf4j-api-1.6.1.jarlog4j-1.2.16.jarおよびcommons-logging-1.1.1.jarです。

logback明らかに非アクティブであることを定義するものは何ですか? それを有効にする方法は?

4

4 に答える 4

2

sl4j はファサードであり、実際の実装はありません。つまり、sl4j は単独では機能せず、基礎となるロギング フレームワークは log4j、logback、java util logging などにすることができます。

slf4j-log4j12-1.6.1.jar依存関係は、基礎となるロギングの実装が log4j であることを意味します。

このアプローチの利点は、後でロギングの実装を Log4j から logback (多くの人がより優れていると主張しています) または他のロギング フレームワークに切り替えることができることです。クラスがロギング フレームワークに密接に結合されていません。

于 2012-12-22T17:37:37.440 に答える
1

logback-classic.jarとslf4j-log4j12.jarの両方がクラスパスに存在する場合に説明する状況は、SLF4Jエラーコードのドキュメントに記載されている「マルチバインディングの問題」のインスタンスです。関連するエラーコードの説明は次のように述べています。

SLF4Jが発する警告は、まさにその警告です。複数のバインディングが存在する場合でも、SLF4Jは1つのロギングフレームワーク/実装を選択してバインドします。SLF4Jがバインディングを選択する方法は、JVMによって決定され、すべての実用的な目的でランダムと見なす必要があります。バージョン1.6.6以降、SLF4Jは、実際にバインドされているフレームワーク/実装クラスに名前を付けます。

不思議なことに、あなたはあなたの質問でこのエラーメッセージに言及していませんでした。logback-classic.jarとslf4j-log4j12.jarの両方が実際にクラスパスに存在する場合、SLF4Jは警告として「クラスパスに複数のバインディングが見つかりました」と確実に出力します。そうでない場合は、クラスパスに実際に存在するバインディングは1つだけです。

于 2012-12-22T19:14:14.290 に答える
1

プロジェクト コードで slf4j が使用されている場合、どのログ システムを使用しているかを尋ねることは、ある意味で間違った質問をしています。実行時にslf4j が見つけたロギング フレームワークを使用します。よくわからない場合は、関連するすべてのライブラリのデバッグ情報をオンにします。

  • log4j の場合は-Dlog4j.debug、Java コマンド ラインに追加します。
  • slf4j の場合、デバッグ コードを追加し、ILoggerFactoryインスタンスのクラス名 ( LoggerFactory.getILoggerFactory()によって返される) を出力したことを覚えています。これにより、使用する実際のロガーが明らかになります。
  • logback や commons のログをデバッグする方法はわかりませんが、彼らのドキュメントがそれを示していると確信しています。
于 2012-12-22T19:21:16.457 に答える
1

あなたが言及したjarを考えると、ロギングシステムはlog4jであり、slf4jまたはcommonsロギング(おそらく他のフレームワークの依存関係を満たすために提供される)のいずれかを介してアクセスされると思います.

ここで重要なのはslf4j-log4j12-1.6.1.jar、log4j を介して slf4j を実装することです。

于 2012-12-22T18:03:49.643 に答える