| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.log.writers" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Writer</title>
- <para>
- Ein Writer ist ein Objekt das von <classname>Zend_Log_Writer_Abstract</classname> abstammt.
- Die Aufgabe eines Writer's ist es Log Daten in ein Speicher-Backend aufzunehmen.
- </para>
- <sect2 id="zend.log.writers.stream">
- <title>In Streams schreiben</title>
- <para>
- <classname>Zend_Log_Writer_Stream</classname> sendet Log Daten in einen
- <ulink url="http://www.php.net/stream">PHP Stream</ulink>.
- </para>
- <para>
- Um Log Daten in den <acronym>PHP</acronym> Ausgabebuffer zu schreiben, muß die URL
- <filename>php://output</filename> verwendet werden. Alternativ können Log Daten direkt
- an einen Stream wie z.B. <constant>STDERR</constant> (<filename>php://stderr</filename>)
- gesendet werden.
- </para>
- <programlisting language="php"><![CDATA[
- $writer = new Zend_Log_Writer_Stream('php://output');
- $logger = new Zend_Log($writer);
- $logger->info('Informational message');
- ]]></programlisting>
- <para>
- Um Daten in eine Datei zu schreiben, muß eine der
- <ulink url="http://www.php.net/manual/de/wrappers.php#wrappers.file">Dateisystem
- URLs</ulink> verwendet werden:
- </para>
- <programlisting language="php"><![CDATA[
- $writer = new Zend_Log_Writer_Stream('/path/to/logfile');
- $logger = new Zend_Log($writer);
- $logger->info('Informative Nachricht');
- ]]></programlisting>
- <para>
- Standardmäßig wird der Stream im Anhänge-Modus geöffnet ("a"). Um Ihn in
- einem anderen Modus zu öffnen, akzeptiert der
- <classname>Zend_Log_Writer_Stream</classname> Konstruktor einen optionalen zweiten
- Parameter für den Modus.
- </para>
- <para>
- Der Konstruktor von <classname>Zend_Log_Writer_Stream</classname> akzeptiert auch eine
- existierende Stream Ressource:
- </para>
- <programlisting language="php"><![CDATA[
- $stream = @fopen('/path/to/logfile', 'a', false);
- if (! $stream) {
- throw new Exception('Stream konnte nicht geöffnet werden');
- }
- $writer = new Zend_Log_Writer_Stream($stream);
- $logger = new Zend_Log($writer);
- $logger->info('Informative Nachricht');
- ]]></programlisting>
- <para>
- Der Modus kann für existierende Stream Ressourcen nicht definiert werden. Wenn das
- gemacht versucht wird, wird eine <classname>Zend_Log_Exception</classname> geworfen.
- </para>
- </sect2>
- <sect2 id="zend.log.writers.database">
- <title>In Datenbanken schreiben</title>
- <para>
- <classname>Zend_Log_Writer_Db</classname> schreibt Log Informationen in eine Datenbank
- Tabelle wobei <classname>Zend_Db</classname> verwendet wird. Der Konstrukor von
- <classname>Zend_Log_Writer_Db</classname> benötigt eine
- <classname>Zend_Db_Adapter</classname> Instanz, einen Tabellennamen, und ein Abbild der
- Datenbankspalten zu den Elementen der Eventdaten:
- </para>
- <programlisting language="php"><![CDATA[
- $params = array ('host' => '127.0.0.1',
- 'username' => 'malory',
- 'password' => '******',
- 'dbname' => 'camelot');
- $db = Zend_Db::factory('PDO_MYSQL', $params);
- $columnMapping = array('lvl' => 'priority', 'msg' => 'message');
- $writer = new Zend_Log_Writer_Db($db, 'log_table_name', $columnMapping);
- $logger = new Zend_Log($writer);
- $logger->info('Informative Nachricht');
- ]]></programlisting>
- <para>
- Das obige Beispiel schreibt eine einzelne Zeile von Log Daten in einem Datenbanktabelle
- welche 'log_table_name' Tabelle benannt wird. Die Datenbankspalte welche 'lvl' benannt
- ist empfängt die Nummer der Priorität und die Spalte welche 'msg' benannt ist empfängt
- die Log Nachricht.
- </para>
- </sect2>
- <xi:include href="Zend_Log-Writers-Firebug.xml" />
- <xi:include href="Zend_Log-Writers-Mail.xml" />
- <xi:include href="Zend_Log-Writers-Syslog.xml" />
- <xi:include href="Zend_Log-Writers-ZendMonitor.xml" />
- <sect2 id="zend.log.writers.null">
- <title>Einen Writer abstumpfen</title>
- <para>
- <classname>Zend_Log_Writer_Null</classname> ist ein Stumpf der keine Log Daten
- irgendwohin schreibt. Er ist nützlich um die Protokollierung auszuschalten oder während
- Tests abzustumpfen:
- </para>
- <programlisting language="php"><![CDATA[
- $writer = new Zend_Log_Writer_Null;
- $logger = new Zend_Log($writer);
- // geht nirgendwohin
- $logger->info('Informative Nachricht');
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.log.writers.mock">
- <title>Mit der Attrappe testen</title>
- <para>
- <classname>Zend_Log_Writer_Mock</classname> ist ein sehr einfacher Writer der die rohen
- Daten die er empfängt aufnimmt und in einem Array als öffentliche Eigenschaft zur
- Verfügung stellt.
- </para>
- <programlisting language="php"><![CDATA[
- $mock = new Zend_Log_Writer_Mock;
- $logger = new Zend_Log($mock);
- $logger->info('Informative Nachricht');
- var_dump($mock->events[0]);
- // Array
- // (
- // [timestamp] => 2007-04-06T07:16:37-07:00
- // [message] => Informative Nachricht
- // [priority] => 6
- // [priorityName] => INFO
- // )
- ]]></programlisting>
- <para>
- Um die Events die von der Attrappe protokolliert wurden zu entfernen, muß einfach
- <command>$mock->events = array()</command> gesetzt werden.
- </para>
- </sect2>
- <sect2 id="zend.log.writers.compositing">
- <title>Gemischte Writer</title>
- <para>
- Es gibt kein gemischtes Writer Objekt. Trotzdem kann eine Log Instanz in jede beliebige
- Anzahl von Writern schreiben. Um das zu tun, muß die
- <methodname>addWriter()</methodname> Methode verwendet werden:
- </para>
- <programlisting language="php"><![CDATA[
- $writer1 = new Zend_Log_Writer_Stream('/path/to/first/logfile');
- $writer2 = new Zend_Log_Writer_Stream('/path/to/second/logfile');
- $logger = new Zend_Log();
- $logger->addWriter($writer1);
- $logger->addWriter($writer2);
- // Geht zu beiden Writern
- $logger->info('Informative Nachricht');
- ]]></programlisting>
- </sect2>
- </sect1>
|