Zend_Log-Formatters.xml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  4. <sect1 id="zend.log.formatters">
  5. <title>フォーマッタ</title>
  6. <para>
  7. フォーマッタの役割は、<property>event</property> 配列からイベントの内容を受け取り、
  8. それを文字列としてフォーマットして出力することです。
  9. </para>
  10. <para>
  11. ライターによっては行指向ではないものもあります。そのような場合はフォーマッタは使用できません。
  12. たとえばデータベースライターなどがその例で、
  13. これはイベントの項目を直接データベースのカラムに書き出します。
  14. フォーマッタをサポートできないライターに対してフォーマッタを設定しようとすると、
  15. 例外がスローされます。
  16. </para>
  17. <sect2 id="zend.log.formatters.simple">
  18. <title>単純なフォーマット</title>
  19. <para>
  20. <classname>Zend_Log_Formatter_Simple</classname> はデフォルトのフォーマッタです。
  21. これは、何もフォーマッタを指定しなかった場合に自動的に設定されます。
  22. デフォルトの設定は、次のようになります。
  23. </para>
  24. <programlisting language="php"><![CDATA[
  25. $format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
  26. $formatter = new Zend_Log_Formatter_Simple($format);
  27. ]]></programlisting>
  28. <para>
  29. フォーマッタを個々のライターオブジェクトに対して設定するには、ライターの
  30. <methodname>setFormatter()</methodname> メソッドを使用します。
  31. </para>
  32. <programlisting language="php"><![CDATA[
  33. $writer = new Zend_Log_Writer_Stream('php://output');
  34. $formatter = new Zend_Log_Formatter_Simple('hello %message%' . PHP_EOL);
  35. $writer->setFormatter($formatter);
  36. $logger = new Zend_Log();
  37. $logger->addWriter($writer);
  38. $logger->info('there');
  39. // "hello there" と出力します
  40. ]]></programlisting>
  41. <para>
  42. <classname>Zend_Log_Formatter_Simple</classname> のコンストラクタには、
  43. パラメータとして書式指定文字列を渡すことができます。
  44. この文字列には、キーをパーセント記号で囲んだもの
  45. (例. <command>%message%</command>) を含めます。
  46. 書式指定文字列には、イベントデータの配列の任意のキーを含めることができます。
  47. デフォルトのキーを取得するには、<classname>Zend_Log_Formatter_Simple</classname>
  48. の定数 DEFAULT_FORMAT を使用します。
  49. </para>
  50. </sect2>
  51. <sect2 id="zend.log.formatters.xml">
  52. <title>XML へのフォーマット</title>
  53. <para>
  54. <classname>Zend_Log_Formatter_Xml</classname> は、ログのデータを <acronym>XML</acronym> 文字列に変換します。
  55. デフォルトでは、イベントデータ配列のすべての項目を自動的に記録します。
  56. </para>
  57. <programlisting language="php"><![CDATA[
  58. $writer = new Zend_Log_Writer_Stream('php://output');
  59. $formatter = new Zend_Log_Formatter_Xml();
  60. $writer->setFormatter($formatter);
  61. $logger = new Zend_Log();
  62. $logger->addWriter($writer);
  63. $logger->info('通知メッセージ');
  64. ]]></programlisting>
  65. <para>
  66. 上のコードの出力は、次のような <acronym>XML</acronym> になります (可読性を確保するため空白を補っています)。
  67. </para>
  68. <programlisting language="xml"><![CDATA[
  69. <logEntry>
  70. <timestamp>2007-04-06T07:24:37-07:00</timestamp>
  71. <message>通知メッセージ</message>
  72. <priority>6</priority>
  73. <priorityName>INFO</priorityName>
  74. </logEntry>
  75. ]]></programlisting>
  76. <para>
  77. ルート要素を変更したり、<acronym>XML</acronym> の要素名とイベントデータ配列の項目名の対応を指定したりすることも可能です。
  78. <classname>Zend_Log_Formatter_Xml</classname> のコンストラクタの最初のパラメータには、
  79. ルート要素の名前を指定します。また、
  80. 二番目のパラメータには要素名の対応を表す連想配列を指定します。
  81. </para>
  82. <programlisting language="php"><![CDATA[
  83. $writer = new Zend_Log_Writer_Stream('php://output');
  84. $formatter = new Zend_Log_Formatter_Xml('log',
  85. array('msg' => 'message',
  86. 'level' => 'priorityName')
  87. );
  88. $writer->setFormatter($formatter);
  89. $logger = new Zend_Log();
  90. $logger->addWriter($writer);
  91. $logger->info('通知メッセージ');
  92. ]]></programlisting>
  93. <para>
  94. 上のコードは、ルート要素の名前をデフォルトの
  95. <property>logEntry</property> から <property>log</property> に変更します。また、要素名
  96. <property>msg</property> をイベントデータの項目 <property>message</property> に対応させます。
  97. 出力結果は次のようになります。
  98. </para>
  99. <programlisting language="xml"><![CDATA[
  100. <log>
  101. <msg>通知メッセージ</msg>
  102. <level>INFO</level>
  103. </log>
  104. ]]></programlisting>
  105. </sect2>
  106. </sect1>