Zend_Log-Writers.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  4. <sect1 id="zend.log.writers" xmlns:xi="http://www.w3.org/2001/XInclude">
  5. <title>ライター</title>
  6. <para>
  7. ライターは、<classname>Zend_Log_Writer_Abstract</classname>
  8. を継承したオブジェクトです。ライターの役割は、
  9. ログのデータをバックエンドのストレージに記録することです。
  10. </para>
  11. <sect2 id="zend.log.writers.stream">
  12. <title>ストリームへの書き出し</title>
  13. <para>
  14. <classname>Zend_Log_Writer_Stream</classname> は、ログデータを
  15. <ulink url="http://www.php.net/stream">PHP のストリーム</ulink>
  16. に書き出します。
  17. </para>
  18. <para>
  19. ログのデータを <acronym>PHP</acronym> の出力バッファに書き出すには、URL <filename>php://output</filename>
  20. を使用します。一方、ログのデータを直接 <constant>STDERR</constant>
  21. のようなストリームに送ることもできます (<filename>php://stderr</filename>)。
  22. </para>
  23. <programlisting language="php"><![CDATA[
  24. $writer = new Zend_Log_Writer_Stream('php://output');
  25. $logger = new Zend_Log($writer);
  26. $logger->info('Informational message');
  27. ]]></programlisting>
  28. <para>
  29. データをファイルに書き出すには、
  30. <ulink url="http://www.php.net/manual/ja/wrappers.php#wrappers.file">ファイルシステム
  31. URL</ulink> のいずれかを使用します。
  32. </para>
  33. <programlisting language="php"><![CDATA[
  34. $writer = new Zend_Log_Writer_Stream('/path/to/logfile');
  35. $logger = new Zend_Log($writer);
  36. $logger->info('Informational message');
  37. ]]></programlisting>
  38. <para>
  39. デフォルトでは、ストリームを追記モード ("a") でオープンします。
  40. 別のモードでオープンするには、<classname>Zend_Log_Writer_Stream</classname>
  41. のコンストラクタで二番目のオプション引数にモードを指定します。
  42. </para>
  43. <para>
  44. <classname>Zend_Log_Writer_Stream</classname> のコンストラクタには、
  45. 既存のストリームリソースを指定することもできます。
  46. </para>
  47. <programlisting language="php"><![CDATA[
  48. $stream = @fopen('/path/to/logfile', 'a', false);
  49. if (! $stream) {
  50. throw new Exception('ストリームのオープンに失敗しました');
  51. }
  52. $writer = new Zend_Log_Writer_Stream($stream);
  53. $logger = new Zend_Log($writer);
  54. $logger->info('通知メッセージ');
  55. ]]></programlisting>
  56. <para>
  57. 既存のストリームリソースに対してモードを指定することはできません。
  58. 指定しようとすると <classname>Zend_Log_Exception</classname> をスローします。
  59. </para>
  60. </sect2>
  61. <sect2 id="zend.log.writers.database">
  62. <title>データベースへの書き出し</title>
  63. <para>
  64. <classname>Zend_Log_Writer_Db</classname> は、
  65. <classname>Zend_Db</classname> を使用してログ情報をデータベースに書き出します。
  66. <classname>Zend_Log_Writer_Db</classname> のコンストラクタには
  67. <classname>Zend_Db_Adapter</classname> のインスタンス、テーブル名
  68. およびデータベースのカラムとイベントデータ項目との対応を指定します。
  69. </para>
  70. <programlisting language="php"><![CDATA[
  71. $params = array ('host' => '127.0.0.1',
  72. 'username' => 'malory',
  73. 'password' => '******',
  74. 'dbname' => 'camelot');
  75. $db = Zend_Db::factory('PDO_MYSQL', $params);
  76. $columnMapping = array('lvl' => 'priority', 'msg' => 'message');
  77. $writer = new Zend_Log_Writer_Db($db, 'log_table_name', $columnMapping);
  78. $logger = new Zend_Log($writer);
  79. $logger->info('通知メッセージ');
  80. ]]></programlisting>
  81. <para>
  82. 上の例は、一行ぶんのログデータを 'log_table_name'
  83. という名前のテーブルに書き出します。データベースのカラム
  84. 'lvl' には優先度の番号が格納され、'msg'
  85. というカラムにログのメッセージが格納されます。
  86. </para>
  87. </sect2>
  88. <xi:include href="Zend_Log-Writers-Firebug.xml" />
  89. <xi:include href="Zend_Log-Writers-Mail.xml" />
  90. <xi:include href="Zend_Log-Writers-Syslog.xml" />
  91. <xi:include href="Zend_Log-Writers-ZendMonitor.xml">
  92. <xi:fallback><xi:include href="../../en/module_specs/Zend_Log-Writers-ZendMonitor.xml" /></xi:fallback>
  93. </xi:include>
  94. <sect2 id="zend.log.writers.null">
  95. <title>ライターのスタブ</title>
  96. <para>
  97. <classname>Zend_Log_Writer_Null</classname> はスタブで、ログデータをどこにも書き出しません。
  98. これは、ログ出力を無効にしたりテスト時などに便利です。
  99. </para>
  100. <programlisting language="php"><![CDATA[
  101. $writer = new Zend_Log_Writer_Null;
  102. $logger = new Zend_Log($writer);
  103. // どこにも出力されません
  104. $logger->info('通知メッセージ');
  105. ]]></programlisting>
  106. </sect2>
  107. <sect2 id="zend.log.writers.mock">
  108. <title>モックによるテスト</title>
  109. <para>
  110. <classname>Zend_Log_Writer_Mock</classname> は非常にシンプルなライターです。
  111. 受け取った生のデータを配列に格納し、それを public プロパティとして公開します。
  112. </para>
  113. <programlisting language="php"><![CDATA[
  114. $mock = new Zend_Log_Writer_Mock;
  115. $logger = new Zend_Log($mock);
  116. $logger->info('通知メッセージ');
  117. var_dump($mock->events[0]);
  118. // Array
  119. // (
  120. // [timestamp] => 2007-04-06T07:16:37-07:00
  121. // [message] => 通知メッセージ
  122. // [priority] => 6
  123. // [priorityName] => INFO
  124. // )
  125. ]]></programlisting>
  126. <para>
  127. モックが記録したイベントを消去するには、単純に <command>$mock->events = array()</command>
  128. とします。
  129. </para>
  130. </sect2>
  131. <sect2 id="zend.log.writers.compositing">
  132. <title>ライターを組み合わせる</title>
  133. <para>
  134. 合成ライターオブジェクトはありません。
  135. しかし、ログのインスタンスは任意の数のライターに書き出すことができます。そのためには
  136. <methodname>addWriter()</methodname> メソッドを使用します。
  137. </para>
  138. <programlisting language="php"><![CDATA[
  139. $writer1 = new Zend_Log_Writer_Stream('/path/to/first/logfile');
  140. $writer2 = new Zend_Log_Writer_Stream('/path/to/second/logfile');
  141. $logger = new Zend_Log();
  142. $logger->addWriter($writer1);
  143. $logger->addWriter($writer2);
  144. // 両方のライターに書き出されます
  145. $logger->info('通知メッセージ');
  146. ]]></programlisting>
  147. </sect2>
  148. </sect1>