Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2004/01/30

counter hits
since 1999/11/06


log4j風ログ出力クラス

alertここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。

zip形式 tgz形式

memo[2004/01/30] :: phpPatterns()Log4phpのサイトが紹介されています。こちらはホントにlog4jと同じですね。。。

「Java言語で学ぶデザインパターン入門」(ソフトバンクパブリッシング/\3,800/ISBN4-7973-1646-2)の著者である結城 浩さんのWebサイト(http://www.hyuki.com/)で知ったNull Objectパターンを使ったログ出力クラスです。

クラス図は以下のようになります。

log4pクラス図

memo[2002/04/02] Null Objectパターンとは、結城さんのサイトにもあるように、「同じインタフェース(API)を持ちながら、何も処理しないクラス」を利用したパターンのことを指します。log4pの場合は、LogNullOutputクラスが何も処理をしないクラスに相当します。また、Strategyパターンにもなっています。

LogOutputクラスは抽象クラスの * 位置づけ * です。PHPではJavaのような抽象クラス・メソッドは「実際は」作れませんので、あくまで形としてのクラスになります(実際、LogNullOutputクラスと等価です)。また、LogOutputクラスを継承してLogFileOutputクラスなどの具象クラスを作成しています。実際には、これらの具象クラスが使用されます。

また、このページからダウンロードできるアーカイブには、以下のような簡単なサンプルスクリプトも付けてますので、実際に試してみることができます。メソッドなどの詳細はAPIドキュメントを参照して、色々と試してみてください。

使えるかどうかは別問題として、作ってみてPHPでも(頑張れば?)色々とできそうだと実感しました。

●log4p_test.php

<?php
require_once "./Log4p.phl";
?>
<?php
    $iter = 10;

    /**
     * 出力レベル
     */
    $logLevel = LOG_INFO;
//    $logLevel = LOG_DEBUG;

  // インスタンスを取得
    $log = &Log4p::getInstance($logLevel);

    for ($i = 0; $i < $iter; $i++) {
        $log->debug("\$i=" . $i);
        $sum += $i;
        $log->debug("\$sum=" . $sum);
    }
    echo "sum=" . $sum;
?>

●出力結果(LOG_INFO)
sum=45  
●出力結果(LOG_DEBUG)
[DEBUG] $i=0
[DEBUG] $sum=0
[DEBUG] $i=1
[DEBUG] $sum=1
[DEBUG] $i=2
[DEBUG] $sum=3
[DEBUG] $i=3
[DEBUG] $sum=6
[DEBUG] $i=4
[DEBUG] $sum=10
[DEBUG] $i=5
[DEBUG] $sum=15
[DEBUG] $i=6
[DEBUG] $sum=21
[DEBUG] $i=7
[DEBUG] $sum=28
[DEBUG] $i=8
[DEBUG] $sum=36
[DEBUG] $i=9
[DEBUG] $sum=45
sum=45  


About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2004 by Hideyuki SHIMOOKA all rights reserved.