質問

なぜひば以下のいずれかのパッケージの代わりに。

  • Javaのログイン
  • ロギング-コモンズ
  • Log4j
  • SLF4j
  • Logback
役に立ちましたか?

解決

時系列ライブラリ(api)一覧apperance(てい):

  • Log4jで誰でも利用で私の経験)
  • ロギング-コモンズがオープンソースのソフトウェアの使用までを何でもログインの枠組みに統合ソリューション);特に有効であればAPI/枠組み/OSSやまなどを使用しているパッケージ-コモンズです。
  • コモンズのログインできない"ロックダウンしたり、特定のロギングの枠組み(いわきロックの下にどのロギング-コモンズまで)-いと思いますが顕決めることの理由です。
  • Javaのロギングなどを追加したいエキストラjar.
  • SLF4jで最新情報をメールにてお届けしまモンズローパラメータ化されたログイン:

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}
  • Logbackので最新情報をメールにてお届けしまlog4jは、再度、サポートし、パラメータ化されたログインしている実SLF4j直接
  • SLF4j/Logbackのでは同じだったlog4jったので良いよ 健G -のおかげ。いわきを見る その前のニュースの投稿)
  • SLF4jでも公開log4jアダプターをかけて、"スイッチ出"log4j古いコードだけでlog4j.特性を利用SLF4jで構成

他のヒント

私はJavaでロギングが悪い文書化、一貫性のない、混乱、そして特にでたらめであることがわかりました。あなたが実際にあるか、ロギング環境へとまた、作業の重複が生じ、これらのログのフレームワークとの間の類似性、および混乱の膨大な量があります。あなたが深刻なJava Webアプリケーション・スタックで作業している場合は特に、あなたは多くの場合でありますの複数ののログ環境一度。 (例えばのlog4jを使用することが休止状態、およびTomcatが持つjava.util.logging)。 Apacheのコモンズは、異なるログのフレームワークを埋めるためのものが、実際にはもっと複雑にしています。あなたは時間のこの先がわからない場合、それは全く途方に暮れるです。なぜ私のログメッセージは、など、コンソールにプリントアウトされていませんか?おお、私はlog4jのTomcatのログを見て、そしてわけではないので。複雑さのさらに別の層を追加し、アプリケーション・サーバは、特定のWebアプリケーションのためのローカル設定を認識しないかもしれないグローバルログ構成を有していてもよいです。最後に、これらすべてのロギングフレームワークがあまりにも複雑です。 Javaでロギングが挫折と混乱して私のような開発者を残して無秩序な混乱しています。

のJavaの初期のバージョンでは、このシナリオにつながる内蔵のロギングフレームワークを持っていませんでした。

前に言及されなかった一つの重要なポイントがあります

SLF4J(およびロギングバックエンドとしてLogbackとLOG4J両方)は、のjavadoc ドキュメントで)。

これは本質的に、あなたのロギングイベントに追加のコンテキスト情報を追加するために使用できるスレッドローカル地図<文字列、文字列>です。 MDCの現在の状態は、すべてのイベントにアタッチされます。

あなたはそれにユーザ名と(Webアプリケーションの場合)、要求のURLのようなものを置く場合は、

これは非常に便利です。これは、例えば、フィルタを使用して自動的に行うことができます。

参照への回答質問 何のためのベストプラクティスログにエラー?, 特に:

  • ある可能性 classloading課題-コモンズ ロギング

  • Log4JとSLF4Jが開発した 同じ人からの学習 問題発見の実践とLog4J.

当社のプロジェクトでは、Log4jのを使用し、スティーブンは彼の例で示したように、非常に使いやすいです。 あなたがあなた自身の出力ファイルスキーマを作成することができるように、我々はまた、Log4jのための当社独自のパターンクラスを書かれています。あなたは、ログファイルは次のようになりますどのように記述することができます。元のlog4jクラスを向上させることが可能である。

あなたが別のプロジェクトのために別のファイルを使用できるようにあなたは、log4j.propertiesファイルに変更することができますすべてのlog4jプロパティを。

Javaロギングは私のFavoritはありませんが、私は最初からのlog4jを使用しているので、これは可能性があります。

href="http://commons.apache.org/logging/" rel="nofollow noreferrer">コモンズ概要のロギング

それは私が知っている他の開発者の多くがそうであるように私は、コモンズのログへの書き込み、と述べました。その理由は、精神的な荷物を最小限にすることです:あなたは(新しいジョブ/プロジェクトはまた、CLを使用して、および/またはあなたがそれに移動するためにそれらを説得することができます提供)新しいフレームワークを学ぶ必要があるプロジェクトや仕事を変える、とすることはできません。

また、あなたが使用してどのようなフレームワークを中心に、独自のラッパーを作成するにはいくつかの値があります。 ここを説明したように、私は、カスタムを提供するために、LogWrapperオブジェクトを使用したいです文字列化(重要)、およびログ・ステートメント(重要度の低い)の視覚的な混乱を最小限に抑えます。

一般的に、私はLog4Jのを使用して、デフォルトでしょう。

私は、Java 1.4への依存性を気にしなかった場合、私はJavaロギングを使用しますが、私はまだ優先してLog4Jのを使用することになります。

私はすでにそれを使用して何かを高めた場合は、

私は、ログ・コモンズを使用することになります。

私はバッキングエンジンの選択肢はかなり議論の余地がポイントになった時点で、ロギングフレームワークのいずれかに書き込むことができます薄いログファサードを作成することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top