@blog.justoneplanet.info

日々勉強

ZendFramework Zend_Debug, Zend_Log, Zend_Exception(デバッグ、ログ、例外)

■Zend_Debug

require_once 'Zend/Debug.php';

$str = 'this is a sample!'
Zend_Debug::dump($str);

■Zend_Log

長期にわたって監視したい場合に有効である。

require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Stream.php';

$logger = new Zend_Log();
$writer = new Zend_Log_Writer_Stream('/path/to/log.txt');
$logger->addWriter($writer);

DBにログを書き込みたい場合は以下のようにする。

require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Db.php';
require_once 'Zend/Db.php';

$dbh = Zend_Db::factory(
    'Pdo_Mysql',
    array(
        'host' => 'localhost',
        'username' => 'user',
        'password' => 'pass',
        'dbname' => 'dbname'
    )
);
$dbh->query("SET NAMES 'utf8'");

$logger = new Zend_Log();
$writer = new Zend_Log_Writer_DB(
    $dbh,
    'table_log',
    array(
        'level' => 'priority',
        'priority' => 'priorityName',
        'msg' => 'message',
        'register_date' => 'timestamp'
    )
);
$logger->addWriter($writer);

上述の場合、既にDBにtable_logテーブルが存在し、カラム(level,priority,msg,register_date)が作られている前提である。

実用例

以下のようにすると警告以上のメッセージしか記録されない。

require_once 'Zend/Log.php';
require_once 'Zend/Log/Writer/Stream.php';

$logger = new Zend_Log();
$writer = new Zend_Log_Writer_Stream('/path/to/log.txt');
$logger->addWriter($writer);
$writer->addFilter(Zend_Log::ERR);

$logger->log('システム使用不可' , Zend_Log::EMERG);
$logger->log('至急対応が必要' , Zend_Log::ALER);
$logger->log('危機的な状況' , Zend_Log::CRIT);
$logger->log('エラー' , Zend_Log::ERR);
$logger->log('警告' , Zend_Log::WARN);
$logger->log('注意' , Zend_Log::NOTICE);
$logger->log('情報' , Zend_Log::INFO);
$logger->log('デバッグメッセージ' , Zend_Log::DEBUG);

■Zend_Exception

ZendFrameworkでは全ての例外がZend_Exceptionを継承している。

<?php
require_once 'Zend/Db.php';
try{
    $dbh = Zend_Db::factory(
        'Pdo_Mysql',
        array(
            'host' => 'localhost',
            'username' => 'name',
            'password' => 'pass',
            'dbname' => 'dbname'
        )
    );
}
catch(Zend_Db_Adapter_Exeption $e){
    //failed to connect because of invalid user or db switch in the off position
}
catch(Zend_Exception $e){
    //failed to load the class file
}

各メソッドについて

Zend_Debug::dump(mixed $variable[, string $caption[, bool $isDisplayed]])
第一引数の内容を第二引数のキャプションをつけて表示する。第三引数がfalseの場合は値を文字列として返します。
Zend_Log::__construct(void)
ログオブジェクトを生成する。
Zend_Log_Writer_Stream::__construct(string $path_to_txt);
第一引数にファイルのパスを指定し書込オブジェクトを生成する。
Zend_Log_Writer_DB::__construct(resource $dbh, string $table_name, array $dbcolumn_for_log);
第一引数にDBハンドラを、第二引数にテーブル名を、第三引数にテーブルのカラムをキーにした連想配列を指定し書込オブジェクトを生成する。
Zend_Log::addWriter($writer);
ログオブジェクトに引数の書込オブジェクトを付加する。
Zend_Log_Writer_Stream::addFilter(int $error_level)
第一引数で指定したレベルでフィルタリングする。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment