Zend_Log-Writers.xml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.log.writers" xmlns:xi="http://www.w3.org/2001/XInclude">
  5. <title>Writer</title>
  6. <para>
  7. Ein Writer ist ein Objekt das von <classname>Zend_Log_Writer_Abstract</classname> abstammt.
  8. Die Aufgabe eines Writer's ist es Log Daten in ein Speicher-Backend aufzunehmen.
  9. </para>
  10. <sect2 id="zend.log.writers.stream">
  11. <title>In Streams schreiben</title>
  12. <para>
  13. <classname>Zend_Log_Writer_Stream</classname> sendet Log Daten in einen
  14. <ulink url="http://www.php.net/stream">PHP Stream</ulink>.
  15. </para>
  16. <para>
  17. Um Log Daten in den <acronym>PHP</acronym> Ausgabebuffer zu schreiben, muß die URL
  18. <filename>php://output</filename> verwendet werden. Alternativ können Log Daten direkt
  19. an einen Stream wie z.B. <constant>STDERR</constant> (<filename>php://stderr</filename>)
  20. gesendet werden.
  21. </para>
  22. <programlisting language="php"><![CDATA[
  23. $writer = new Zend_Log_Writer_Stream('php://output');
  24. $logger = new Zend_Log($writer);
  25. $logger->info('Informational message');
  26. ]]></programlisting>
  27. <para>
  28. Um Daten in eine Datei zu schreiben, muß eine der
  29. <ulink url="http://www.php.net/manual/de/wrappers.php#wrappers.file">Dateisystem
  30. URLs</ulink> verwendet werden:
  31. </para>
  32. <programlisting language="php"><![CDATA[
  33. $writer = new Zend_Log_Writer_Stream('/path/to/logfile');
  34. $logger = new Zend_Log($writer);
  35. $logger->info('Informative Nachricht');
  36. ]]></programlisting>
  37. <para>
  38. Standardmäßig wird der Stream im Anhänge-Modus geöffnet ("a"). Um Ihn in
  39. einem anderen Modus zu öffnen, akzeptiert der
  40. <classname>Zend_Log_Writer_Stream</classname> Konstruktor einen optionalen zweiten
  41. Parameter für den Modus.
  42. </para>
  43. <para>
  44. Der Konstruktor von <classname>Zend_Log_Writer_Stream</classname> akzeptiert auch eine
  45. existierende Stream Ressource:
  46. </para>
  47. <programlisting language="php"><![CDATA[
  48. $stream = @fopen('/path/to/logfile', 'a', false);
  49. if (! $stream) {
  50. throw new Exception('Stream konnte nicht geöffnet werden');
  51. }
  52. $writer = new Zend_Log_Writer_Stream($stream);
  53. $logger = new Zend_Log($writer);
  54. $logger->info('Informative Nachricht');
  55. ]]></programlisting>
  56. <para>
  57. Der Modus kann für existierende Stream Ressourcen nicht definiert werden. Wenn das
  58. gemacht versucht wird, wird eine <classname>Zend_Log_Exception</classname> geworfen.
  59. </para>
  60. </sect2>
  61. <sect2 id="zend.log.writers.database">
  62. <title>In Datenbanken schreiben</title>
  63. <para>
  64. <classname>Zend_Log_Writer_Db</classname> schreibt Log Informationen in eine Datenbank
  65. Tabelle wobei <classname>Zend_Db</classname> verwendet wird. Der Konstrukor von
  66. <classname>Zend_Log_Writer_Db</classname> benötigt eine
  67. <classname>Zend_Db_Adapter</classname> Instanz, einen Tabellennamen, und ein Abbild der
  68. Datenbankspalten zu den Elementen der Eventdaten:
  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('Informative Nachricht');
  80. ]]></programlisting>
  81. <para>
  82. Das obige Beispiel schreibt eine einzelne Zeile von Log Daten in einem Datenbanktabelle
  83. welche 'log_table_name' Tabelle benannt wird. Die Datenbankspalte welche 'lvl' benannt
  84. ist empfängt die Nummer der Priorität und die Spalte welche 'msg' benannt ist empfängt
  85. die Log Nachricht.
  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. <sect2 id="zend.log.writers.null">
  93. <title>Einen Writer abstumpfen</title>
  94. <para>
  95. <classname>Zend_Log_Writer_Null</classname> ist ein Stumpf der keine Log Daten
  96. irgendwohin schreibt. Er ist nützlich um die Protokollierung auszuschalten oder während
  97. Tests abzustumpfen:
  98. </para>
  99. <programlisting language="php"><![CDATA[
  100. $writer = new Zend_Log_Writer_Null;
  101. $logger = new Zend_Log($writer);
  102. // geht nirgendwohin
  103. $logger->info('Informative Nachricht');
  104. ]]></programlisting>
  105. </sect2>
  106. <sect2 id="zend.log.writers.mock">
  107. <title>Mit der Attrappe testen</title>
  108. <para>
  109. <classname>Zend_Log_Writer_Mock</classname> ist ein sehr einfacher Writer der die rohen
  110. Daten die er empfängt aufnimmt und in einem Array als öffentliche Eigenschaft zur
  111. Verfügung stellt.
  112. </para>
  113. <programlisting language="php"><![CDATA[
  114. $mock = new Zend_Log_Writer_Mock;
  115. $logger = new Zend_Log($mock);
  116. $logger->info('Informative Nachricht');
  117. var_dump($mock->events[0]);
  118. // Array
  119. // (
  120. // [timestamp] => 2007-04-06T07:16:37-07:00
  121. // [message] => Informative Nachricht
  122. // [priority] => 6
  123. // [priorityName] => INFO
  124. // )
  125. ]]></programlisting>
  126. <para>
  127. Um die Events die von der Attrappe protokolliert wurden zu entfernen, muß einfach
  128. <command>$mock->events = array()</command> gesetzt werden.
  129. </para>
  130. </sect2>
  131. <sect2 id="zend.log.writers.compositing">
  132. <title>Gemischte Writer</title>
  133. <para>
  134. Es gibt kein gemischtes Writer Objekt. Trotzdem kann eine Log Instanz in jede beliebige
  135. Anzahl von Writern schreiben. Um das zu tun, muß die
  136. <methodname>addWriter()</methodname> Methode verwendet werden:
  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. // Geht zu beiden Writern
  145. $logger->info('Informative Nachricht');
  146. ]]></programlisting>
  147. </sect2>
  148. </sect1>