Zend_Log-Writers.xml 5.8 KB

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