log4jとcommons-logging でログをだす。

Javaでログといえばlog4jだが、とてもわかりにくい。
というか、わからん。つかっているけど、いつまでたってもわからん。

最近ようやく、log4jとcommons-loggingを一緒に使うと便利らしい知る。

≪いるもの≫
 log4j.jar
 commons-logging.jar

≪やり方≫eclipse前提かつWebアプリより)
【1】jarはWebアプリなら WEB-INF/libとかにいれて、クラスパスにいれとく。

【2】ログ用クラスを書く
 log4jの使い方を説明しているサイトは、たいてい汎用的でないログの説明しかしていないぞ!
 
ヲれはすぐにつかえるねたほしいんだ!←低レベル

  MyLoggerクラスの場合
   (1)クラスをつくる
   (2)以下のように書く
        private static final Log log = LogFactory.getLog(MyLogger.class);
   (3)右クリック→Source→Generate Delegate Methods
   (4)全部選択する
       → メソッドが沢山できる
        → ぜんぶ static にする

ここまででもいいが、共通で使うには現実的でない

  (5)メソッドを改造する。
     引数を、Object、String、String  にする。
     それぞれ、インスタンス(?)、メソッド名、メッセージ になる。

    /**
     *
     * @param class1      インスタンス
     * @param methodName  メソッド名
     * @param message     メッセージ
     */
    public static void debug(Object class1, String methodName, String message) {
        log.debug(format(class1, methodName,message));
    }


  (6)メッセージを加工するメソッドをつくる
     引数を増やすとそのままではログのメソッドにわたせない
      上の三つを一つにくっつける

    private static String format(Object class1, String methodName,
            String message) {
        String tmp = class1.getClass().getName() + "[" + methodName + "]"
                + message;
        return tmp;
    }

【3】設定ファイルを書く
log4j.properties だ。(XMLもあるがよう知らん)

 コンソールとローリングファイルを、2つずつつくる。

 コンソールとローリングファイルの一組はlog4j.rootLogger用にする。
log4j.rootLogger=DEBUG, consoleRoot, rollingRoot
 レベルはWARNとかERRORにする。
 そうしないとSpringとかHibernateとかげろげろログをだす。myfacesも。

 その他の組を、MyLogger用にする
log4j.logger.hoge.util.MyLogger=DEBUG, consoleApp1, rollingApp1
 こっちはDEBUGにする。

【4】
log4j.properties はクラスパスが通っているところにおく。

【5】テスト用クラスをつくる

▼一部

    public String getMessage() {
        MyLogger.debug(this, "getMessage", "+++ IN +++");
        return message;
    }


できたー・・・・・・・

いやー、できてないかな。
コードがのっていないとむずいよねー。。。