2012-03-16 10 views
18

私は、さまざまなアプリケーションで使用するさまざまな機能を収集するライブラリを作成しています。ライブラリのユーザが見ることができるログステートメントを生成したいとします。つまり、アプリケーションをビルドしてライブラリを使用している場合、ライブラリにログステートメントを表示させたいと思っています。それ、どうやったら出来るの?ログファイルはアプリケーションの開発者によって設定されるので、私のライブラリはどのようにログを取るべきかを知っていますか?Logger for Javaライブラリ

+0

Springのフレームワークを見てみましょう。具体的には、依存性注入機能は、あなたにとって最も有用な部分です。 – cdeszaq

答えて

23

ライブラリを開発している場合は、アプリケーションにログファサードを使用する必要があります。それ以外の場合は、ライブラリのユーザに、アプリケーションとして選択したフレームワークに加えて、を選択したロギングフレームワークを設定して、強制的に組み込みます。例えば

あなたはのlog4jを使用しますが、あなたのライブラリーを使用する開発者は、彼があなたのライブラリーを幸せにするためにlog4jの設定ファイルとlog4jのjarファイルを含める(またはother measuresを取る)する必要がありますlogbackを使用している場合。

ロギングファサードには、(Apacheのコモンズログからの)この問題を解決:

情報をログするために非常に便利であるライブラリを書きます。しかし、そこには多くのロギング実装が存在し、ライブラリはライブラリが属するアプリケーション全体に特定のものを使用することはできません。

ロギングパッケージは、さまざまなロギング実装間の超薄型ブリッジです。コモンズロギングAPIを使用するライブラリは、実行時にすべてのロギング実装で使用できます。 Commons-loggingには、多くの一般的なロギング実装がサポートされています。他のもののためのアダプタの作成は、非常に簡単な作業です。

またはSLF4Jから推論:

Javaまたは(SLF4J)のための簡単なロギングファサードは、例えば、様々なロギングフレームワークのための単純なファサード又は抽象として機能しますjava.util.logging、log4j、およびlogbackを使用して、エンドユーザがデプロイメント時刻に目的のログフレームワークをプラグインできるようにします。ログファサード

候補者は、次のとおりです。

  • SLF4J
  • +0

    あなたの例は誤解を招きます。開発者は、サードパーティ用のコードとlog4jアダプタ用のSLF4J APIを同時に使用することができます。その後、彼はちょうどログバックのようないくつかのSLF4Jバックエンドを選びます。実際これがSLF4Jの理由ですが、それはとても簡単です。 log4j設定は不要です。 –

    +0

    @RostislavMatl SLF4Jの「ブリッジングモジュール」(http://www.slf4j.org/legacy.html)についてお聞かせください。これらを使用すると、log4j、...を内部的に使用するライブラリを使用して、ログメッセージをSLF4J(ログバックによってバックアップされる可能性があります)にリダイレクトできます。あなたが図書館のユーザーであれば、これは確かに素晴らしい機能です。しかし、あなたがライブラリの開発者であるときに、なぜあなたはそのようなフープでジャンプするようにユーザーを強制すべきですか?なぜファサードを直接使用しないのですか? SLF4Jのページに記載されているように、これらのソリューションは「あなたの制御を超えたソフトウェアに適しています」。私があなたに誤解した場合は、私を修正してください。 – Joe23

    +0

    どうやら私たちはさまざまなことについて話しています。あなたは書いています:「あなたがlog4jを使っていて、あなたのライブラリを使っている開発者がlogbackを使うのなら、彼はlog4jの設定を含める必要があります」 - それは真実ではありません。それは同時に悪い解決策です。 新しいコードを開発する際にSLF4Jを使用できないとは言いませんでした。 ライブラリのユーザーポイントまたはビューを選択したのは、ユーザーとクリエイターの方が多いからです。 –

    2

    ロギングフレームワークの設定では、ログファイルの場所はパッケージの外に設定されます。 設定ファイルは通常、クラスパス上にあります。どのように見えるかは、使用するログフレームワークによって異なります。SLF4JLogbackを使用することをお勧めします。このため