web-dev-qa-db-ja.com

SLF4JとLOG4Jどちらを好むか?

私はこれを見ました 質問 が私に答えません。

まったく新しいプロジェクトがあります。私はほとんどいつもLog4Jを使用してきましたが、今はSLF4Jが波を作っているのを見ています。 Log4Jができなかったことと、SLF4Jが必要なことは何ですか?それは本当にアップグレードですか?他にも拡張するためのAPIがあるプロジェクトで使用する必要がありますか?

6
Shahzeb

SLF4Jは基本的に抽象化レイヤーです。ロギングの実装ではありません。つまり、ライブラリを作成していてSLF4Jを使用している場合、そのライブラリを他の誰かに渡して使用してもらい、使用するロギング実装を選択してもらうことができますwith SLF4J例: log4jまたはJavaロギングAPI。プロジェクトが多数のロギングAPIに依存しているライブラリを使用しているという理由だけで、それらが依存しているのを防ぐのに役立ちます。

要約すると、SLF4Jはlog4jに代わるものではなく、連携して動作します。ライブラリ/アプリからlog4jへの依存を削除します。

ここを見てください: http://www.slf4j.org/ 、またはここでも: http://commons.Apache.org/logging/ (Apache Commons Loggingこのコンセプトの詳細については、SLF4Jに似ています)。

11

slf4jは、多くのロギングフレームワークへの一般的なアクセスを提供し、既存のコードを簡単に使用できるようにする多数のグルーコードを備えたAPIです。どちらを使用するかは、コードの記述時ではなく、展開時で決定されます。

今日のベストプラクティスは、slf4jを使用して独自のログステートメントを作成し、それに適切なバックエンドを選択することです。ここlog4j。

移行する主な理由は、メッセージ文字列に{}が含まれるため、ifDebug() { log("...") }構成をスキップできるためです。

3
user1249

SLF4jは単なるロギングAPI /インターフェースであるため、完全なロギングフレームワークであるlog4j(構成可能なアペンダー、フィルターなど)を直接置き換えるのではなく、Commons Loggingを、フレームワークに依存しないロギングAPIに置き換えます。

SLF4jは、log4jをロギングバックエンドとして使用するように構成できるため、これらを連携させることができます。ただし、非常に密接に関連するプロジェクトはlogback( http://logback.qos.ch/ )です。 LogbackはLog4jの代替です。Logbackは(Log4jと同様に)ロギングフレームワークですが、SLF4j APIをネイティブで使用します。

SLF4jには、他のロギングAPIをSLF4j APIに委任するのに使用できるいくつかの便利なコンパニオンJARファイルがあります。 log4j-over-slf4j(log4jと互換性のあるAPI)。これらを使用すると、多くのロギングAPIがSLF4j(サードパーティのJARに便利)とやり取りできるため、すべてのログを処理する単一のロギングフレームワークを使用できます。

SLF4j APIは、log4j/logbackの「MDC」機能(Commons Logging APIでは使用できません)をサポートしているため、特定のフレームワークに依存せずにプロジェクトでこの機能を使用できます。おそらくlog4j呼び出しをSLF4j呼び出しに置き換えることができます(NDCなどの他の機能を使用している場合を除く)。

1
ysdx