SL4J、Jakarta Commonsロギング、サードパーティライブラリ用のlog4jおよび自分のコードを使用したロギング
-
19-08-2019 - |
質問
ロギング、具体的には設定と動作確認について質問があります。
私がやっているプロジェクトでは、 Wicket 、 Spring および Hibernate 。 WicketとHibernateはJava用のシンプルロギングファサード( SL4J )を使用し、Springは Apache Commonsのログコンポーネント。
彼らは幸せに共存しますか? log4j をSL4JとApache commonsのロギングコンポーネントの両方とともに使用すると思いました、それは良い考えだと思いますか?
すべてのログデータを共通ファイルに出力するように設定できますか? または、個別のファイルを使用する必要がありますか? または、ログメッセージをデータベースに保存する必要がありますか? (テキストファイルでgrepを実行するなど非常に便利だと思うので、やめたいです。)
Springの場合、Apache Commonsのログコンポーネント用に、log4jを使用するように指示する場所に何らかの構成ファイルが必要ですか?
これらを設定したら、3つすべてのフレームワークがそのモードで何らかの情報を出力することはかなり確実なので、すべてが機能することを確認するためにログレベルをINFOに設定しますか?または、それを確認するためのさらに良い方法はありますか?
そして最後の質問です。私が始めているプロジェクトでは、自分のロギングの目的でSL4Jを使用することをお勧めしますか? (私はlog4jを直接使用すると思っていましたが、それはロギングについてもう少し学ぶ前であり、多くの立派なライブラリはロギングニーズに合わせてブリッジ/ファサードのパスを選択しているようです。そのようにしない理由はありません。)
どのようにログを記録しているのかについて、あなたからもっと聞いてくれることを楽しみにしています。これは私にとって新しい分野であり、自分自身を改善したいと思っています。
解決
Well SLF4Jは、コモンズロギングのような単なる外観です。つまり、動作するためには他に何かが必要です。ライブラリの作成者は、ユーザーに複数のロギングライブラリと構成を強制することを許可しません。 Log4jとlogbackは通常のロギングライブラリです。
詳細については、こちらをご覧ください。
SLF4Jには、 commons logging bridge があり、これを使用してcommons loggingライブラリを置き換えることができます。スキーマは状況を非常によく説明していると思います。
今、slf4j-logj12.jarを使用してcommonsロギングを行い、slf4jがlog4j(または選択した他のもの; btw、logbackはslf4jで使用される追加のライブラリを必要としません)をバッキングエンジンとして使用する必要があります。
アプリケーションはこうして
- jcl104-over-slf4j.jar(jakarta commonsのログをslf4jにブリッジするため)
- slf4j.jar(休止状態などでslf4jを使用する場合)
- slf4j-logj12.jar(slf4jがlog4jをバックエンドとして使用する)
- log4j.jar(使用するアプリケーション用。すべての設定もここで行われます)
他のヒント
すべてをSLF4Jにリダイレクトする方法は次のとおりです。
-
クラスパスから
commons-logging.jar
を削除します。 Mavenを使用していて、commons-loggingを削除できない場合は、これ。
クラスパスに -
put
jcl-over-slf4j.jar
(SLF4Jディストリビューションに含まれています)。これは、JCLのクラスを模倣するドロップイン置換ですが、内部でSLF4Jを呼び出します。これにより、Spring、およびJCLを使用する他のフレームワークが処理されます。
クラスパスにslf4j-xxx.jar
を入力して、SLF4Jをお気に入りのバックエンド(Log4J、Logback ...)に接続します。すべてのカテゴリを1つのファイルに記録するようにバックエンドを設定すれば完了です。
アプリケーションでSLF4Jを使用する場合、厳密には必要ありません。 JCLやSLF4Jなどのライブラリは、もともとライブラリを作成し、特定のロギングフレームワークにクライアントをロックしたくない人向けに設計されました。
PS:ところで、JCL = Jakarta Commons Logging