Writer
Ein Writer ist ein Objekt das von Zend_Log_Writer_Abstract abstammt.
Die Aufgabe eines Writer's ist es Log Daten in ein Speicher-Backend aufzunehmen.
In Streams schreiben
Zend_Log_Writer_Stream sendet Log Daten in einen
PHP Stream.
Um Log Daten in den PHP Ausgabebuffer zu schreiben, muß die URL
php://output verwendet werden. Alternativ können Log Daten direkt
an einen Stream wie z.B. STDERR (php://stderr)
gesendet werden.
info('Informational message');
]]>
Um Daten in eine Datei zu schreiben, muß eine der
Dateisystem
URLs verwendet werden:
info('Informative Nachricht');
]]>
Standardmäßig wird der Stream im Anhänge-Modus geöffnet ("a"). Um Ihn in
einem anderen Modus zu öffnen, akzeptiert der
Zend_Log_Writer_Stream Konstruktor einen optionalen zweiten
Parameter für den Modus.
Der Konstruktor von Zend_Log_Writer_Stream akzeptiert auch eine
existierende Stream Ressource:
info('Informative Nachricht');
]]>
Der Modus kann für existierende Stream Ressourcen nicht definiert werden. Wenn das
gemacht versucht wird, wird eine Zend_Log_Exception geworfen.
In Datenbanken schreiben
Zend_Log_Writer_Db schreibt Log Informationen in eine Datenbank
Tabelle wobei Zend_Db verwendet wird. Der Konstrukor von
Zend_Log_Writer_Db benötigt eine
Zend_Db_Adapter Instanz, einen Tabellennamen, und ein Abbild der
Datenbankspalten zu den Elementen der Eventdaten:
'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');
]]>
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.
Einen Writer abstumpfen
Zend_Log_Writer_Null ist ein Stumpf der keine Log Daten
irgendwohin schreibt. Er ist nützlich um die Protokollierung auszuschalten oder während
Tests abzustumpfen:
info('Informative Nachricht');
]]>
Mit der Attrappe testen
Zend_Log_Writer_Mock 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.
info('Informative Nachricht');
var_dump($mock->events[0]);
// Array
// (
// [timestamp] => 2007-04-06T07:16:37-07:00
// [message] => Informative Nachricht
// [priority] => 6
// [priorityName] => INFO
// )
]]>
Um die Events die von der Attrappe protokolliert wurden zu entfernen, muß einfach
$mock->events = array() gesetzt werden.
Gemischte Writer
Es gibt kein gemischtes Writer Objekt. Trotzdem kann eine Log Instanz in jede beliebige
Anzahl von Writern schreiben. Um das zu tun, muß die
addWriter() Methode verwendet werden:
addWriter($writer1);
$logger->addWriter($writer2);
// Geht zu beiden Writern
$logger->info('Informative Nachricht');
]]>