2012-01-20 6 views
2

be Spring Frameworkのドキュメントによると、Springの唯一の依存関係はロギングです。デフォルトではApache Commons Loggingを使用しますが、代わりにSLF4JまたはLog4Jを使用するように設定することもできます。私の質問は、私がSpringを使って書いているアプリケーションで、differentnt loggerクラスを使い、アプリケーションで新しいロガーオブジェクトをインスタンス化するのではなく、Springがそれ自身のために使っているロガーへの参照を得ることができるでしょうか?Springが使用しているロガーへの参照を取得することは可能ですか?

答えて

4

確かに - ロガーは、名前だけで参照されます。したがって、Springが "org.springframework.beans.abc"(たとえば)をロガー名として使用する場合、同じ名前のロガーを要求することもできます。 (春はただ一つロガー/名前を使用してログインしていない - それはあなたが春に使用しているものに応じて、いくつかを使用しています - 。それが必要として)

をしかし、私は強くこれを行うことに対して推薦します。新しいロガーオブジェクトをインスタンス化するコストは最小限に抑えなければなりません。これを行う際の節約は、そのような追加の混乱によって相殺されます。 SpringログはSpringロガー名に記録されます。コードは、コード固有のロガー名に記録する必要があります。それ以外の場合は、何かが記録されている場合、それがSpringコードかあなたのコードから来ているかどうかをどのように知っていますか?これは、ロガー/カテゴリ名の目的を完全に無効にします。

2

は、いくつかのことをクリアする必要があります。 Apache Commons Loggingはロガーファサードであり、ロガー自体ではありません。 Springライブラリはこのファサードを使用して、特定のロギング実装との結合を回避します。

スプリング(またはApache Commonsのロギングを使用する何か)はSLF4Jは、Apache Commonsのロギングを提供することブリッジの実装を提供することによってSLF4Jを使用するように構成することができます。 SLF4Jもロギング・ファサードですが、Apache Commons Loggingよりも改善されており、あなたのコードのロギングに個人的に推奨するものです。 SLF4Jによるロギングは、特定のロギング実装への結合も回避します。

あなたはそれらのウェブサイトhttp://www.slf4j.orgでSLF4Jに関する詳細な情報を見つけることができます。 SLF4J Manualの最初のページは、ロガーを作成して使用する方法を示しています。あなたのコードがSLF4Jロガーを使用するとき、実行時にLog4J、java.util.logging、Logbackのような実際のロガーにクラスパス上で提供するslf4jバインディングに応じてロギングを委任します。

は、一般的に、ロギングのために、一般的な方法は、あなたが(それを使用して、クラスの完全修飾クラス名と各ロガーに名前を付けることで)ログに記録し、それぞれ異なるクラスのロガーを持っているということです。この原則は、上記リンク先のSLF4Jマニュアルに示されています。

関連する問題