Zend_Log-Overview.xml 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15156 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.log.overview">
  5. <title>Übersicht</title>
  6. <para>
  7. <classname>Zend_Log</classname> ist eine Komponente für Mehrzweckprotokollierung. Es unterstützt vielfache
  8. Log Backends, das Senden von formatierten Nachrichten zum Log, und das Filtern von Nachrichten
  9. um nicht protokolliert zu werden. Diese Funktionen sind in die folgenden Objekte seperiert worden:
  10. <itemizedlist>
  11. <listitem>
  12. <para>
  13. Ein Log (Instanz von <classname>Zend_Log</classname>) ist das Objekt das die Anwendung am meisten benutzt. Man
  14. kann soviele Log Objekte haben wie man will; Sie interagieren nicht. Ein Log Objekt muß mindestens
  15. einen Schreiber beinhalten, und kann optional einen oder mehrere Filter beinhalten.
  16. </para>
  17. </listitem><listitem>
  18. <para>
  19. Ein Writer (Abgeleitet von <classname>Zend_Log_Writer_Abstract</classname>) ist dafür zuständig das Daten in
  20. den Speicher geschrieben werden.
  21. </para>
  22. </listitem><listitem>
  23. <para>
  24. Ein Filter (implementiert <classname>Zend_Log_Filter_Interface</classname>) blockiert Logdaten vom gespeichert
  25. werden. Ein Filter kann einem individuellen Writer hinzugefügt werden, oder an ein Log wo er
  26. vor allen Writern hinzugefügt wird. In jedem Fall können Filter verkettet werden.
  27. </para>
  28. </listitem><listitem>
  29. <para>
  30. Ein Formatter (implementiert <classname>Zend_Log_Formatter_Interface</classname>) kann die Logdaten formatieren
  31. bevor diese durch den Writer geschrieben werden. Jeder Writer hat exakt einen Formatter.
  32. </para>
  33. </listitem>
  34. </itemizedlist>
  35. </para>
  36. <sect2 id="zend.log.overview.creating-a-logger">
  37. <title>Erstellen eines Logs</title>
  38. <para>
  39. Um das protokollieren zu starten, muß ein Writer instanziert werden und einer Log Instanz übergeben werden:
  40. <programlisting role="php"><![CDATA[
  41. $logger = new Zend_Log();
  42. $writer = new Zend_Log_Writer_Stream('php://output');
  43. $logger->addWriter($writer);
  44. ]]></programlisting>
  45. Es ist wichtig anzumerken das das Log mindestens einen Writer haben muß. Man kann eine beliebige Anzahl von
  46. Writern hinzufügen indem man die <code>addWriter()</code> Methode des Log's verwendet.
  47. </para>
  48. <para>
  49. Alternativ kann ein Writer direkt dem Konstruktor von Log, als Abkürzung, übergeben werden:
  50. <programlisting role="php"><![CDATA[
  51. $writer = new Zend_Log_Writer_Stream('php://output');
  52. $logger = new Zend_Log($writer);
  53. ]]></programlisting>
  54. Das Log ist nun fertig zur Verwendung.
  55. </para>
  56. </sect2>
  57. <sect2 id="zend.log.overview.logging-messages">
  58. <title>Nachrichten protokollieren</title>
  59. <para>
  60. Um eine Nachricht zu protokollieren, muß die <code>log()</code> Methode einer Log Instanz aufgerufen werden
  61. und die Nachricht mit einer entsprechenden Priorität übergeben werden:
  62. <programlisting role="php"><![CDATA[
  63. $logger->log('Informative Nachricht', Zend_Log::INFO);
  64. ]]></programlisting>
  65. Der erste Parameter der <code>log()</code> Methode ist ein <code>message</code> String und der zweite
  66. Parameter ist ein <code>priority</code> Integerwert. Die Priorität muß eine der Prioritäten sein die von
  67. der Log Instanz erkannt wird. Das wird in der nächsten Sektion beschrieben.
  68. </para>
  69. <para>
  70. Eine Abkürzung ist auch verfügbar. Statt dem Aufruf der <code>log()</code> Methode kann eine Methode des
  71. selben Namens wie die Priorität aufgerufen werden:
  72. <programlisting role="php"><![CDATA[
  73. $logger->log('Informative Nachricht', Zend_Log::INFO);
  74. $logger->info('Informative Nachricht');
  75. $logger->log('Notfall Nachricht', Zend_Log::EMERG);
  76. $logger->emerg('Notfall Nachricht');
  77. ]]></programlisting>
  78. </para>
  79. </sect2>
  80. <sect2 id="zend.log.overview.destroying-a-logger">
  81. <title>Ein Log entfernen</title>
  82. <para>
  83. Wenn ein Log Objekt nicht länger benötigt wird, kann die Variable die das Log enthält auf <code>null</code>
  84. gesetzt werden um es zu entfernen. Das wird automatisch die Instanzmethode <code>shutdown()</code> von jedem
  85. hinzugefügten Writer aufrufen bevor das Log Objekt entfernt wird:
  86. <programlisting role="php"><![CDATA[
  87. $logger = null;
  88. ]]></programlisting>
  89. Das explizite entfernen des Logs auf diesem Weg ist optional und wird automatisch durchgeführt wenn PHP
  90. herunterfährt.
  91. </para>
  92. </sect2>
  93. <sect2 id="zend.log.overview.builtin-priorities">
  94. <title>Verwenden von eingebauten Prioritäten</title>
  95. <para>
  96. Die <classname>Zend_Log</classname> Klasse definiert die folgenden Prioritäten:
  97. <programlisting role="php"><![CDATA[
  98. EMERG = 0; // Notfall: System ist nicht verwendbar
  99. ALERT = 1; // Alarm: Aktionen müßen sofort durchgefüht werden
  100. CRIT = 2; // Kritisch: Kritische Konditionen
  101. ERR = 3; // Fehler: Fehler Konditionen
  102. WARN = 4; // Warnung: Warnungs Konditionen
  103. NOTICE = 5; // Notiz: Normal aber signifikante Kondition
  104. INFO = 6; // Informativ: Informative Nachrichten
  105. DEBUG = 7; // Debug: Debug Nachrichten
  106. ]]></programlisting>
  107. Diese Prioritäten sind immer vorhanden und eine komfortable Methode für den selben Namen ist für jede
  108. einzelne vorhanden.
  109. </para>
  110. <para>
  111. Die Prioritäten sind nicht beliebig. Die kommen vom BSD <code>syslog</code> Protokoll, welches in
  112. <ulink url="http://tools.ietf.org/html/rfc3164">RFC-3164</ulink> beschrieben wird. Die Namen und
  113. korrespondierenden Prioritätennummern sind auch mit einem anderen PHP Logging Systeme kompatibel,
  114. <ulink url="http://pear.php.net/package/log">PEAR Log</ulink>, welches möglicherweise mit
  115. Interoperabilität zwischen Ihm und <classname>Zend_Log</classname> wirbt.
  116. </para>
  117. <para>
  118. Nummern für Prioritäten sinken in der Reihenfolge ihrer Wichtigkeit. <code>EMERG</code> (0) ist die
  119. wichtigste Priorität. <code>DEBUG</code> (7) ist die unwichtigste Priorität der eingebauten Prioritäten.
  120. Man kann Prioritäten von niedriger Wichtigkeit als <code>DEBUG</code> definieren. Wenn die Priorität für die
  121. Lognachricht ausgewählt wird, sollte auf die Hirarchie der Prioritäten geachtet werden und selbige sorgfältig
  122. ausgewählt werden.
  123. </para>
  124. </sect2>
  125. <sect2 id="zend.log.overview.user-defined-priorities">
  126. <title>Hinzufügen von selbstdefinierten Prioritäten</title>
  127. <para>
  128. Selbstdefinierte Prioritäten können wärend der Laufzeit hinzugefügt werden durch verwenden der
  129. <code>addPriority()</code> Methode des Log's:
  130. <programlisting role="php"><![CDATA[
  131. $logger->addPriority('FOO', 8);
  132. ]]></programlisting>
  133. Das obige Codeschnipsel erstellt eine neue Priorität, <code>FOO</code>, dessen Wert <code>8</code> ist.
  134. Die neue Priorität steht für die Protokollierung zur Verfügung:
  135. <programlisting role="php"><![CDATA[
  136. $logger->log('Foo Nachricht', 8);
  137. $logger->foo('Foo Nachricht');
  138. ]]></programlisting>
  139. Neue Prioritäten können bereits bestehende nicht überschreiben.
  140. </para>
  141. </sect2>
  142. <sect2 id="zend.log.overview.understanding-fields">
  143. <title>Log Events verstehen</title>
  144. <para>
  145. Wenn die <code>log()</code> Methode oder eine Ihrer Abkürzungen aufgerufen wird, wird ein Log Event erstellt.
  146. Das ist einfach ein assoziatives Array mit Daten welche das Event beschreiben das an die Writer übergeben wird.
  147. Die folgenden Schlüssel werden immer in diesem Array erstellt: <code>timestamp</code>, <code>message</code>,
  148. <code>priority</code>, und <code>priorityName</code>.
  149. </para>
  150. <para>
  151. Die Erstellung des <code>event</code> Arrays ist komplett transparent. Trotzdem wird das Wissen über das
  152. <code>event</code> Array für das Hinzufügen von Elementen benötigt, die in dem obigen Standardset nicht
  153. existieren.
  154. </para>
  155. <para>
  156. Um ein neues Element für jedes zukünftige Event hinzuzufügen, muß die <code>setEventItem()</code>
  157. Methode aufgerufen werden wobei ein Schlüssel und ein Wert übergeben wird:
  158. <programlisting role="php"><![CDATA[
  159. $logger->setEventItem('pid', getmypid());
  160. ]]></programlisting>
  161. Das obige Beispiel setzt ein neues Element welches <code>pid</code> heißt und veröffentlicht es mit der
  162. PID des aktuellen Prozesses. Wenn einmal ein neues Element gesetzt wurde, wird es automatisch für alle
  163. Writer verfügbar, zusammen mit allen anderen Daten der Eventdaten wärend des Protokollierens. Ein
  164. Element kann jederzeit überschrieben werden durch nochmaligen Aufruf der <code>setEventItem()</code>
  165. Methode.
  166. </para>
  167. <para>
  168. Das Setzen eines neuen Eventelements mit <code>setEventItem()</code> führt dazu das das neue Element
  169. an alle Writer des Loggers gesendet wird. Trotzdem garantiert das nicht das die Writer das Element aktuell
  170. auch aufzeichnet. Und zwar deswegen weil die Writer nicht wissen was zu tun ist solange das Formatter Objekt
  171. nicht über das neue Element informiert wurde. Siehe in die Sektion über Formatter um mehr darüber zu lernen.
  172. </para>
  173. </sect2>
  174. </sect1>