なぜログ4 JではなくSLF 4 Jを使用してJavaログを作成するのか


Java開発者は、Java.util.logging、Apacheのlog 4 j、logbackなど、ログの記録がJavaアプリケーションにとって重要であることを知っています.また、SLF 4 J、javaの簡単なログの設計を知らない場合は、では、勉強してあなたのプロジェクトでそれを使う時になりました.このJavaドキュメントでは、log 4 jやjava.util.loggingよりもSLF 4 Jを使用する方法を学びます.私から書く Java開発者の10個のログを記録するテクニック 計算するともう長い時間が経った.私が書いたログ記録に関することは何も覚えていません.いずれにしても、SLF 4 Jとそれらの間には、これらのログ・ライブラリと比較して、このトピックに戻りましょう.SLF 4 JまたはJavaの単純なログ設計では、ログ記録が実際に実現されていません.逆に、バックエンドにあるログ記録ライブラリを使用することができます. ちゅうしょうそう .内部または外部で使用されるAPIまたはアプリケーションライブラリを作成している場合は、作成したライブラリを使用するクライアントにログライブラリを選択させる必要はありません.プロジェクトがすでにlog 4 jを使用しており、Apache Active MQというライブラリが含まれていると仮定します.このライブラリが別のログライブラリlogbackに依存している場合は、それらを含める必要がありますが、Apache Active MQがSLF 4 Jを使用している場合は、新しいログフレームワークを苦痛なく追加したり維持したりすることができます.簡単に言えば、SLF 4 Jはあなたのコードを特定のログ記録APIから独立させ、この良い考えは特に共通のAPI開発者に適しています.ログライブラリの抽象的なコンセプトは新しいものではなく、Apacheのcommons loggingログライブラリもこのコンセプトを使っていますが、SLF 4 JはすぐにJava世界で標準的なログライブラリになります.log 4 j,logbackまたはjava.util.loggingを使用せずにSLF 4 Jを使用する理由を見てみましょう.
SLF 4 Jを使ってもLog 4 J、logback、java.util.Loggingは使いたくない
私が前に言ったように、あなたのコードにログ文を書くSLF 4 Jの主な動機は、あなたのプログラムを特定のログライブラリとは独立させることです.これらのログライブラリは、あなたが今構成しているのとは異なる構成が必要になる可能性があります.また、頭が痛いメンテナンスの問題も導入されます.しかし、SLF 4 J APIには、長期的に興味を持っているのではなく、SLF 4 Jを使用することができます. Log4j より納得できる機能、すなわちプレースホルダ機能は、コードに{}で表される.プレースホルダ機能と Stringのformat()メソッドで の%sは、実行時に提供される真の文字列を抽出するため、非常に似ています.これにより、コード内の多くの文字列接続が削減されるだけでなく、Stringオブジェクトの作成に必要なリソースが削減されます.DEBUGやINFOなどの本番環境のログ・レベルの文字列接続が不要な場合でも、同じ効果が得られます.によって 文字列は変更できません ,文字列プールで作成され、使用されています. ヒープメモリ ,アプリケーションが本番環境でERRORレベルで実行される場合、DEBUG文の文字列など、文字列はほとんど必須ではありません.SLF 4 Jを使用すると、文字列の作成を実行時刻まで遅らせることができます.これは、文字列が必要な場合にのみ作成されることを意味します.log 4 jを使用している場合は、if()条件内にデバッグ文を入れる作業シーンを熟知していますが、SLF 4 Jプレースホルダ機能はlog 4 jよりもこのシーンに適しています.
あなたがLog 4 jを使う時のやり方は、もちろんこれは面白くなくて、しかもそれは不要な公式化のコードを増加して、コードの可読性を減らしました.
if (logger.isDebugEnabled()) {
    logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}

SLF 4 Jを使用すると、より簡潔なフォーマットで同じ効果を得ることができます.以下のようにします.
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

SLF 4 Jでは,文字列接合を必要とせず,一時文字列の使用による消費を招くことはない.逆に、プレースホルダ付きテンプレートメッセージを使用してログ情報を記録し、パラメータとして実際の値を提供します.複数のパラメータがある場合はどうすればいいのか、パラメータ版付きのログメソッドを使用したり、Object配列を介して転送したりすることができます.これは確かに便利で効率的なログの記録方法です.ログ情報に最終的な文字列を生成する前に、このメソッドは特定のログ・レベルがオンになっているかどうかを確認します.これにより、メモリの消費量を低減するだけでなく、文字列の接合を実行するのにかかるCPU時間を事前に削減します.次のSLF 4 Jログメソッドのコードは、slf 4 j-log 4 j 12-1.6.1.jarパッケージのLog 4 jのアダプタクラスLog 4 jLogAdapterから来ています.
public void debug(String format, Object arg1, Object arg2) { if (logger.isDebugEnabled()) {
      FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
      logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());
    }
}

同様に、ログはアプリケーションのパフォーマンスにプレッシャーをかけます.通常、本番環境でのみログを強制的に記録することを宣伝しています.
SLF 4 JとLog 4 Jを使用してログを作成
上記のメリットに加えて、SLF 4 Jを使用するには、slf 4 j-api-1.6.1.jarなどのSLF 4 J API Jarパッケージに入るだけでなく、協同作業のJARパッケージを導入する必要があるという警告があると思います.具体的には、jarパッケージはバックエンドでどのログツールライブラリを使用しているかに依存します.SLF 4 J、Simple Logging Facade for Java、またLo 4 Jを使用したい場合は、以下のjarパッケージをclasspathに導入する必要があります.具体的なバージョンは、あなたが使用しているSLF 4 Jとlog 4 Jバージョンによって異なります.例えば、
slf4j-api-1.6.1.jar - JAR for SLF4J API log4j-1.2.16.jar    - JAR for Log4J API slf4j-log4j12-1.6.1.jar - Log4J Adapter for SLF4J
プロジェクト依存を管理するためにMavenを使用している場合は、SLF 4 J JARのみを導入し、mavenが依存する他のJARパッケージを導入することができます.Log 4 JとSLF 4 Jを使用するには、プロジェクトのpom.xmlに次の依存度を追加できます.

        org.slf4j
        slf4j-log4j12
        1.6.1


        org.slf4j
        slf4j-log4j12
        1.6.1
 

ちなみに、パラメータ版付きのログメソッドを使用することに興味がある場合は、SLF 4 J 1.7バージョンを導入する必要があります.
この文章をまとめると、Log 4 j、commons logging、logback、java.util.loggingではなくSLF 4 Jを選択する十分な理由があります.
1)SLF 4 Jをオープンソースまたはプライベートライブラリで使用すると、任意のログから独立して実装できます.これは、複数のライブラリと複数のログファイルを管理する必要がないことを意味します.あなたのクライアントはこの点を体得します.
2)SLF 4 Jは、isDebugEnabled()、isInfoEnabled()などのチェックを削除することによって、コードの読みやすさを向上させるための占有ログ記録を提供する.
3)ログ記録方法を使用することで、使用するまでログ情報(文字列)を構築することができ、メモリとCPUの使用率を同時に向上させることができます.
4)側面の説明をすると、一時的な文字列が少ないほど、ゴミ回収器は少ない仕事を意味し、アプリケーションにより良いスループットとパフォーマンスを提供することを意味します.
これらの利点は氷山の一角にすぎず、SL 4 Jを使い始めて読むと、より多くのメリットを学ぶことができます.Javaでの新しいコード開発は、log 4 Jを含むログAPIではなくSLF 4 Jを使用することを強くお勧めします.