Zend_Logのログ記録をstatic呼び出しにする  2009年4月24日

Zend_Logは非常に便利なログ記録クラスだと思います。BsheでもいくつかWriterを作成して、Syslogやメール、yyyymmdd.log形式でのファイル保存などを実装しています。

Zend_Logの利用は基本的にインスタンスを利用して行うのですが、ログを書き出す箇所でインスタンスをレジストリから呼び出したり、作成したりするのは面倒です。

そこで、スタティックに呼び出せる形にZend_Logクラスを拡張してみました。

 

前提として

  • ●Zend_Logクラスに対してシングルトン実装を行い、スタティックにログクラスを保持できるようにする。

実際の実装はBsheの以下のクラスを参考にしてください。Bsheでは、さらにログ出力を簡素化するのに、ログクラスの呼ばれたファイル名、行番号、引数に配列を取れるなどの拡張を施しています。(ダウンロードはこちら

  • ●Bshe_Log

Zend_Logクラスを継承しての独自クラスの作成

class Bshe_Log extends Zend_Log
{

    /**
     * ログクラス保持用
     *
     * @var unknown_type
     */
    static protected $_logger = null;

    /**
     * ログクラスをスタティックに登録
     *
     * @param unknown_type $logger
     */
    static public function setLogger($logger)
    {
        self::$_logger = $logger;
    }

    /**
     * logクラスのインスタンスを返す。
     *
     * @return Bshe_Log
     */
    static public function getLogger()
    {
        return self::$_logger;
    }

    /**
     * スタティックに保存されたログクラスを利用してログを記録
     * ログクラスがセットされていない場合は何もしない
     *
     * @param unknown_type $message
     * @param unknown_type $priority
     */
    static public function logWrite($message= ”, $priority = Zend_Log::INFO)
    {
        try {
            if (self::$_logger !== null) {
                $logger = self::$_logger;
                $logger->log($message, $priority);

                return;
            }
        } catch (Exception $e) {
            throw $e;
        }
    }
}

実装はいたって単純です、(ただ、Writerによっては、上記のような実装だと問題が出るケースがあるかもしれません。)

こうしておくことで、プログラムの各所から

Bshe_Log::logWrite(‘メッセージ’);

とすることでログが出力できるようになります。

 

 

このエントリをはてなブックマークに登録 このエントリをBuzzurlにブックマーク Yahoo!ブックマークに登録 このエントリをlivedoorクリップに登録 Deliciousにブックマーク

コメントを投稿