| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <!-- EN-Revision: 24249 -->
- <sect1 id="zend.log.writers" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>ライター</title>
- <para>
- ライターは、<classname>Zend_Log_Writer_Abstract</classname>
- を継承したオブジェクトです。ライターの役割は、
- ログのデータをバックエンドのストレージに記録することです。
- </para>
- <sect2 id="zend.log.writers.stream">
- <title>ストリームへの書き出し</title>
- <para>
- <classname>Zend_Log_Writer_Stream</classname> は、ログデータを
- <ulink url="http://www.php.net/stream">PHP のストリーム</ulink>
- に書き出します。
- </para>
- <para>
- ログのデータを <acronym>PHP</acronym> の出力バッファに書き出すには、URL <filename>php://output</filename>
- を使用します。一方、ログのデータを直接 <constant>STDERR</constant>
- のようなストリームに送ることもできます (<filename>php://stderr</filename>)。
- </para>
- <programlisting language="php"><![CDATA[
- $writer = new Zend_Log_Writer_Stream('php://output');
- $logger = new Zend_Log($writer);
- $logger->info('Informational message');
- ]]></programlisting>
- <para>
- データをファイルに書き出すには、
- <ulink url="http://www.php.net/manual/ja/wrappers.php#wrappers.file">ファイルシステム
- URL</ulink> のいずれかを使用します。
- </para>
- <programlisting language="php"><![CDATA[
- $writer = new Zend_Log_Writer_Stream('/path/to/logfile');
- $logger = new Zend_Log($writer);
- $logger->info('Informational message');
- ]]></programlisting>
- <para>
- デフォルトでは、ストリームを追記モード ("a") でオープンします。
- 別のモードでオープンするには、<classname>Zend_Log_Writer_Stream</classname>
- のコンストラクタで二番目のオプション引数にモードを指定します。
- </para>
- <para>
- <classname>Zend_Log_Writer_Stream</classname> のコンストラクタには、
- 既存のストリームリソースを指定することもできます。
- </para>
- <programlisting language="php"><![CDATA[
- $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('通知メッセージ');
- ]]></programlisting>
- <para>
- 既存のストリームリソースに対してモードを指定することはできません。
- 指定しようとすると <classname>Zend_Log_Exception</classname> をスローします。
- </para>
- </sect2>
- <sect2 id="zend.log.writers.database">
- <title>データベースへの書き出し</title>
- <para>
- <classname>Zend_Log_Writer_Db</classname> は、
- <classname>Zend_Db</classname> を使用してログ情報をデータベースに書き出します。
- <classname>Zend_Log_Writer_Db</classname> のコンストラクタには
- <classname>Zend_Db_Adapter</classname> のインスタンス、テーブル名
- およびデータベースのカラムとイベントデータ項目との対応を指定します。
- </para>
- <programlisting language="php"><![CDATA[
- $params = array ('host' => '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('通知メッセージ');
- ]]></programlisting>
- <para>
- 上の例は、一行ぶんのログデータを 'log_table_name'
- という名前のテーブルに書き出します。データベースのカラム
- 'lvl' には優先度の番号が格納され、'msg'
- というカラムにログのメッセージが格納されます。
- </para>
- </sect2>
- <xi:include href="Zend_Log-Writers-Firebug.xml" />
- <xi:include href="Zend_Log-Writers-Mail.xml" />
- <xi:include href="Zend_Log-Writers-Syslog.xml" />
- <xi:include href="Zend_Log-Writers-ZendMonitor.xml">
- <xi:fallback><xi:include href="../../en/module_specs/Zend_Log-Writers-ZendMonitor.xml" /></xi:fallback>
- </xi:include>
- <sect2 id="zend.log.writers.null">
- <title>ライターのスタブ</title>
- <para>
- <classname>Zend_Log_Writer_Null</classname> はスタブで、ログデータをどこにも書き出しません。
- これは、ログ出力を無効にしたりテスト時などに便利です。
- </para>
- <programlisting language="php"><![CDATA[
- $writer = new Zend_Log_Writer_Null;
- $logger = new Zend_Log($writer);
- // どこにも出力されません
- $logger->info('通知メッセージ');
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.log.writers.mock">
- <title>モックによるテスト</title>
- <para>
- <classname>Zend_Log_Writer_Mock</classname> は非常にシンプルなライターです。
- 受け取った生のデータを配列に格納し、それを public プロパティとして公開します。
- </para>
- <programlisting language="php"><![CDATA[
- $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
- // )
- ]]></programlisting>
- <para>
- モックが記録したイベントを消去するには、単純に <command>$mock->events = array()</command>
- とします。
- </para>
- </sect2>
- <sect2 id="zend.log.writers.compositing">
- <title>ライターを組み合わせる</title>
- <para>
- 合成ライターオブジェクトはありません。
- しかし、ログのインスタンスは任意の数のライターに書き出すことができます。そのためには
- <methodname>addWriter()</methodname> メソッドを使用します。
- </para>
- <programlisting language="php"><![CDATA[
- $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('通知メッセージ');
- ]]></programlisting>
- </sect2>
- </sect1>
|