ライターは、Zend_Log_Writer_Abstract
を継承したオブジェクトです。ライターの役割は、
ログのデータをバックエンドのストレージに記録することです。
Zend_Log_Writer_Stream
は、ログデータを
PHP のストリーム
に書き出します。
ログのデータを PHP の出力バッファに書き出すには、URL php://output
を使用します。一方、ログのデータを直接 STDERR
のようなストリームに送ることもできます (php://stderr
)。
<?php $writer = new Zend_Log_Writer_Stream('php://output'); $logger = new Zend_Log($writer); $logger->info('Informational message'); ?>
データをファイルに書き出すには、 ファイルシステム URL のいずれかを使用します。
<?php $writer = new Zend_Log_Writer_Stream('/path/to/logfile'); $logger = new Zend_Log($writer); $logger->info('Informational message'); ?>
デフォルトでは、ストリームを追記モード ("a"
) でオープンします。
別のモードでオープンするには、Zend_Log_Writer_Stream
のコンストラクタで二番目のオプション引数にモードを指定します。
Zend_Log_Writer_Stream
のコンストラクタには、
既存のストリームリソースを指定することもできます。
<?php $stream = @fopen('/path/to/logfile', 'a', false); if (! $stream) { throw new Exception('ストリームのオープンに失敗しました'); } $writer = new Zend_Log_Writer_Stream($stream); $logger = new Zend_Log($writer); $logger->info('通知メッセージ'); ?>
既存のストリームリソースに対してモードを指定することはできません。
指定しようとすると Zend_Log_Exception
をスローします。
Zend_Log_Writer_Db
は、
Zend_Db
を使用してログ情報をデータベースに書き出します。
Zend_Log_Writer_Db
のコンストラクタには
Zend_Db_Adapter
のインスタンス、テーブル名
およびデータベースのカラムとイベントデータ項目との対応を指定します。
columns to event data items:
<?php $params = array ('host' => '127.0.0.1', 'username' => 'malory', 'password' => '******', 'dbname' => 'camelot'); $db = Zend_Db::factory('PDO_MYSQL', $params); $columnMapping = array(array('lvl' => 'priority', 'msg' => 'message')); $writer = new Zend_Log_Writer_Db($db, 'log_table_name', $columnMapping); $logger = new Zend_Log($writer); $logger->info('通知メッセージ'); ?>
上の例は、一行のログデータを log_table_name
という名前のテーブルに書き出します。データベースのカラム
lvl
には優先度の番号が格納され、msg
というカラムにログのメッセージが格納されます。
Zend_Log_Writer_Null
はスタブで、ログデータをどこにも書き出しません。
これは、ログ出力を無効にしたりテスト時などに便利です。
<?php $writer = new Zend_Log_Writer_Null; $logger = new Zend_Log($writer); // どこにも出力されません $logger->info('通知メッセージ'); ?>
Zend_Log_Writer_Mock
は非常にシンプルなライターです。
受け取った生のデータを配列に格納し、それを public プロパティとして公開します。
<?php $mock = new Zend_Log_Writer_Mock; $logger = new Zend_Log($mock); $logger->info('通知メッセージ'); var_dump($mock->events[0]); // Array // ( // [timestamp] => 2007-04-06T07:16:37-07:00 // [message] => 通知メッセージ // [priority] => 6 // [priorityName] => INFO // ) ?>
モックが記録したイベントを消去するには、単純に $mock->events = array()
とします。
合成ライターオブジェクトはありません。
しかし、ログのインスタンスは任意の数のライターに書き出すことができます。そのためには
addWriter()
メソッドを使用します。
<?php $writer1 = new Zend_Log_Writer_Stream('/path/to/first/logfile'); $writer2 = new Zend_Log_Writer_Stream('/path/to/second/logfile'); $logger = new Zend_Log(); $logger->addWriter($writer1); $logger->addWriter($writer2); // 両方のライターに書き出されます $logger->info('通知メッセージ'); ?>