2011年1月15日土曜日

[java][log] 使うか使わないかcommons-logging

自分には log4j-1.2.x がデファクトで、コード中でしっかりimportしています。
が、それはいかがなものかというコンセプトの commons-logging を使ってみました。
commons-loggingを使うと、どうもこういうことらしい。
  • Loggerの実装(例えばlog4j)の選択を後回しにして、でもアプリケーションの実装には着手できます。
  • プロパティファイルの変更(など)だけで、Loggerの実装を変更できます。
こんなシチュエーションに一度も遭遇したことがないけれど。
自分のPCを探してみると結構 commons-logging は使われていました。
(正確に言うと同梱していました。)
  • Oxygen XML Editor
  • DITA Open Toolkit
  • Ant
やっぱり一枚挟んでおくのが礼儀ですか。

◆Javaコード:App.java
-----------------------------
package com.hisagisoft.tomorrowscode.logger;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class App {
  private static final Log log = LogFactory.getLog(App.class);

  public static void main( String[] args ){
    log.info("this is log.");
    System.out.println( "Hello World!" );
  }
}
-----------------------------

◆プロパティファイル:commons-logging.properties
-----------------------------
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
-----------------------------

◆プロパティファイル:log4j.properties
-----------------------------
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c(%L) - %m%n

log4j.appender.null=org.apache.log4j.varia.NullAppender

log4j.rootLogger=debug, null
log4j.logger.com.hisagisoft=debug, stdout
-----------------------------

◆これらの配置



























◆実行(NetBeans上で、です)
------------------------------
run:
2011-01-15 20:41:30,062 [main] INFO  com.hisagisoft.tomorrowscode.logger.App(15) - this is log.
Hello World!
構築成功 (合計時間: 0 秒)
------------------------------


◆結論
手に入るときは使うようにします。

ではまた。

2 件のコメント:

  1. お疲れさまです、師匠。

    これって、下記の二つを指定しないといけないんですよね?

     1) org.apache.commons.logging.Log プロパティ: Log4J のクラス名
     2) クラスパス: Log4J の JAR ファイルのパス

    2 の情報があれば 1 の情報はなくてもいいような気がする (むしろ省略したい) のですが、
    そういう訳にはいかないのでしょうか?

    # JAXP では 1 の情報を省けたような……

    返信削除
  2. > 2 の情報があれば 1 の情報はなくてもいいような気がする (むしろ省略したい) のですが、
    > そういう訳にはいかないのでしょうか?

    1の情報は省略できます。そういう選択もできます。
    自分は結構「明示したい派」なので書いちゃいました。
    これもひとつのドキュメンテーションというか。
    後任者にいち早くcommons-logging ≫ log4jの関連に気がついて欲しいという・・・クセですね、これはもう。(笑)

    返信削除