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ärend 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');
]]>