2008年6月24日火曜日

Commons-Loggingの基本

解説
 Apache Commons Logging (JCL)は軽量であり、且つ、その他のログツールに対して抽象的で独立したインターフェースを提供します。これをつかうとJDK logging API (JSR-47),Log4J,Avalon LogKitなどのログ実装をプラグインして使うことができます。

 JCLは、自動でLogging Systemを見つけてくれるんだけど、自分で指定したい場合は、『commons-logging.properties』に記述することで可能でっす。

ホームページ
Commons-Logging

サンプル・ソース
下記が簡単な使用例です。
public class MainRss {
private static Log logger= LogFactory.getLog("com.ime.dtc.ich.MainRss");
public static void main(String[] args) {
if(logger.isInfoEnabled()){
logger.info("Rss Update Start...");
}
try{
     //なにか処理する
}catch (ConnectException ex){
  logger.error("SQL connection exception");
ex.printStackTrace();
}catch (Exception ex){
ex.printStackTrace();
      logger.error("Exception",ex);
}
if(logger.isInfoEnabled()){
logger.info("Done",ex);
}
}
}

ポイントは、きちんとif()文で下記を確認してからにすると、ログの引数内の処理でオーバーヘッドがかかりません。
log.isFatalEnabled();
log.isErrorEnabled();
log.isWarnEnabled();
log.isInfoEnabled();
log.isDebugEnabled();
log.isTraceEnabled();

それから、もしLogging Systemを指定したい場合は、パスの通ったところに下記のファイルを置いておけばOKです。
"commons-logging.properties"
org.apache.commons.logging.log=org.apache.commons.logging.impl.Log4JLogger

それでもって、"log4j.xml"を配置しておけば、そのファイルの内容に沿ったログの処理をしてくれます。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--ログを出力するFileAppenderをfileとして定義 -->
<appender name="file" class="org.apache.log4j.FileAppender">
<!-- デフォルトのログレベル -->
<param name="threshold" value="debug"/>
<!-- ログのファイル名 -->
<param name="File" value="logs/hibernate.log" />
<!-- ログの追加・新規の設定 -->
<param name="Append" value="false" />
<!-- ログの出力形式を指定 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p %c{1} - %m%n"/>
</layout>
</appender>

<!--ログを出力するConsoleAppenderをstdoutとして定義 -->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<!-- デフォルトのログレベル -->
<param name="threshold" value="warn"/>
<!-- ログの出力形式を指定 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p %c{1} - %m%n"/>
</layout>
</appender>

<root>
<priority value="info" />
<appender-ref ref="stdout"/>
<appender-ref ref="file"/>
</root>
</log4j:configuration>


Annex

commons-Loggingログレベル
LevelUsage
fatalシステムがこれ以上動作できない致命的なエラーが発生した場合
error予期せぬ動作などにより、正しく処理できない場合
warnなんらかの問題が発生したが、動作には影響がない場合
info設定ファイルを読み込んだときの設定情報、システム開始/停止時の状態出力など
debugデバッグ情報。例えば、外部モジュールから呼ばれるメソッドの入出力情報など
trace詳細なデバッグ情報。モジュール内部の情報、ループの繰り返しで大量に出力される情報など


Log4J Appender
アペンダ機能
ConsoleAppenderコンソールにログを出力する
FileAppenderファイルにログを出力する
DailyRollingFileAppenderファイルにログを出力するが毎日/毎週といった、一定期間でログのバックアップを取り、新しいファイルにログを出力することができる
JDBCAppenderデータベースにログを出力する
SMTPAppenderメールにログを出力する


Log4J PatternLayoutの書式
変数説明
%cカテゴリ名。%c{n}で表示するカテゴリ階層を指定する。例えば、a.b.cというカテゴリに対して、%c{2}はb.cを出力する
%d日付。HHを時間、mmを分、ssを秒、SSSをミリ秒としたとき、%d{HH:mm:ss,SSS},%d{ddMMMyyyyHH:mm:ss,SSS}という形式で指定できる。また%d{ISO8601},%d{ABSOLUTE}という形式でも指定可能
%L行番号
%mメッセージ
%n改行。ログメッセージの最後に挿入
%p優先度(fatal/error/warn/info/debug)
%rアプリケーションの実行開始からの経過時間
%tスレッド名。マルチスレッドのプログラムの場合、利用を勧める

0 件のコメント: