Dec 26, 2007
Commons Logging 1.1.1 で Log4j の trace レベルを有効にする。
(2008/01/25) 致命的な間違いのため訂正
桜が咲く頃にふと想ふ さんの 「Commons Loggin + Log4jでTRACEレベルのログを出力CommentsAdd Star」 で、本エントリが根本的に間違っていることを指摘いただいた。ありがとうございます。
Commons Logging 1.1.1 + Log4j 1.2.12 で一切カスタマイズ無しで普通に Trace ログを出力できた。
ソースコード でも確認済み。
・・・カスタマイズしたときに見たソースコードは一体何だったのだろう??
お詫びして訂正致します。取消線が入っている情報は間違っています。信じないで下さい。
Commons Logging 1.1.1 から Log4j を使用する場合、デフォルトでは Commons Logging の trace ログレベルは Log4j の debug ログレベルに対応付けられる。
Log4j では永らく trace ログレベルがサポートされていなかったので当然こういう実装になるだろう。
Log4j 1.2.12 で trace ログレベルがサポートされたのだけれど、残念ながら Commons Logging では未対応の様だ。
というわけで、自力で Commons Logging の trace ログレベルを Log4j の trace ログレベルに対応付けてみた。
- Apache Logging Services
- http://logging.apache.org/
- ASF Bugzilla Bug 35711 Add TRACE level to 1.2 api
- http://issues.apache.org/bugzilla/show_bug.cgi?id=35711
- Apache Commons - Commons Logging
- http://commons.apache.org/logging/
Commons Logging の設定
Commons Logging と Log4j の橋渡しは Log4JLogger というクラスが行っているので、Log4JLogger を拡張して差し替える。
Log4JLogger の拡張クラス
package jp.in_vitro.codelet.logging; import org.apache.commons.logging.impl.Log4JLogger; import org.apache.log4j.Logger; public class TracableLogger extends Log4JLogger { public TracableLogger() { super(); } public TracableLogger(final Logger logger) { super(logger); } public TracableLogger(final String name) { super(name); } @Override public boolean isTraceEnabled() { Logger logger = getLogger(); return logger.isTraceEnabled(); } @Override public void trace(final Object message, final Throwable t) { Logger logger = getLogger(); logger.trace(message, t); } @Override public void trace(final Object message) { Logger logger = getLogger(); logger.trace(message); } }
Commons Logging の設定ファイル
クラスパスのルートに "commons-logging.properties" を作成する。
org.apache.commons.logging.Log=jp.in_vitro.codelet.logging.TracableLogger
writeback message: Ready to post a comment.
