Zend_Log-Formatters.xml 5.0 KB

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