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

TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Library/20071226_01.trackback
Post a comment

writeback message: Ready to post a comment.