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