Programmer's Reference Guide
| Zend_Log |
Übersicht
Zend_Log ist eine Komponente für Mehrzweckprotokollierung. Es unterstützt vielfache Log Backends, das Senden von formatierten Nachrichten zum Log, und das Filtern von Nachrichten um nicht protokolliert zu werden. Diese Funktionen sind in die folgenden Objekte seperiert worden:
-
Ein Log (Instanz von Zend_Log) ist das Objekt das die Anwendung am meisten benutzt. Man kann soviele Log Objekte haben wie man will; Sie interagieren nicht. Ein Log Objekt muß mindestens einen Schreiber beinhalten, und kann optional einen oder mehrere Filter beinhalten.
-
Ein Writer (Abgeleitet von Zend_Log_Writer_Abstract) ist dafür zuständig das Daten in den Speicher geschrieben werden.
-
Ein Filter (implementiert Zend_Log_Filter_Interface) blockiert Logdaten vom gespeichert werden. Ein Filter kann einem individuellen Writer hinzugefügt werden, oder an ein Log wo er vor allen Writern hinzugefügt wird. In jedem Fall können Filter verkettet werden.
-
Ein Formatter (implementiert Zend_Log_Formatter_Interface) kann die Logdaten formatieren bevor diese durch den Writer geschrieben werden. Jeder Writer hat exakt einen Formatter.
Erstellen eines Logs
Um das protokollieren zu starten, muß ein Writer instanziert werden und einer Log Instanz übergeben werden:
- $logger = new Zend_Log();
- $writer = new Zend_Log_Writer_Stream('php://output');
- $logger->addWriter($writer);
Alternativ kann ein Writer direkt dem Konstruktor von Log, als Abkürzung, übergeben werden:
- $writer = new Zend_Log_Writer_Stream('php://output');
- $logger = new Zend_Log($writer);
Nachrichten protokollieren
Um eine Nachricht zu protokollieren, muß die log() Methode einer Log Instanz aufgerufen werden und die Nachricht mit einer entsprechenden Priorität übergeben werden:
- $logger->log('Informative Nachricht', Zend_Log::INFO);
message
String und der zweite Parameter ist ein priority Integerwert. Die Priorität muß
eine der Prioritäten sein die von der Log Instanz erkannt wird. Das wird in der nächsten
Sektion beschrieben.
Eine Abkürzung ist auch verfügbar. Statt dem Aufruf der log() Methode kann eine Methode des selben Namens wie die Priorität aufgerufen werden:
- $logger->log('Informative Nachricht', Zend_Log::INFO);
- $logger->info('Informative Nachricht');
- $logger->log('Notfall Nachricht', Zend_Log::EMERG);
- $logger->emerg('Notfall Nachricht');
Ein Log entfernen
Wenn ein Log Objekt nicht länger benötigt wird, kann die Variable die das Log enthält auf NULL gesetzt werden um es zu entfernen. Das wird automatisch die Instanzmethode shutdown() von jedem hinzugefügten Writer aufrufen bevor das Log Objekt entfernt wird:
- $logger = null;
Verwenden von eingebauten Prioritäten
Die Zend_Log Klasse definiert die folgenden Prioritäten:
- EMERG = 0; // Notfall: System ist nicht verwendbar
- ALERT = 1; // Alarm: Aktionen müßen sofort durchgefüht werden
- CRIT = 2; // Kritisch: Kritische Konditionen
- ERR = 3; // Fehler: Fehler Konditionen
- WARN = 4; // Warnung: Warnungs Konditionen
- NOTICE = 5; // Notiz: Normal aber signifikante Kondition
- INFO = 6; // Informativ: Informative Nachrichten
- DEBUG = 7; // Debug: Debug Nachrichten
Die Prioritäten sind nicht beliebig. Die kommen vom BSD syslog Protokoll, welches
in » RFC-3164 beschrieben wird. Die
Namen und korrespondierenden Prioritätennummern sind auch mit einem anderen PHP Logging
Systeme kompatibel, » PEAR Log, welches
möglicherweise mit Interoperabilität zwischen Ihm und Zend_Log wirbt.
Nummern für Prioritäten sinken in der Reihenfolge ihrer Wichtigkeit. EMERG (0)
ist die wichtigste Priorität. DEBUG (7) ist die unwichtigste Priorität der
eingebauten Prioritäten. Man kann Prioritäten von niedriger Wichtigkeit als DEBUG
definieren. Wenn die Priorität für die Lognachricht ausgewählt wird, sollte auf die Hirarchie
der Prioritäten geachtet werden und selbige sorgfältig ausgewählt werden.
Hinzufügen von selbstdefinierten Prioritäten
Selbstdefinierte Prioritäten können wärend der Laufzeit hinzugefügt werden durch verwenden der addPriority() Methode des Log's:
- $logger->addPriority('FOO', 8);
FOO, dessen Wert
8 ist. Die neue Priorität steht für die Protokollierung zur Verfügung:
- $logger->log('Foo Nachricht', 8);
- $logger->foo('Foo Nachricht');
Log Events verstehen
Wenn die log() Methode oder eine Ihrer Abkürzungen aufgerufen wird,
wird ein Log Event erstellt. Das ist einfach ein assoziatives Array mit Daten welche das Event
beschreiben das an die Writer übergeben wird. Die folgenden Schlüssel werden immer in diesem
Array erstellt: timestamp, message, priority, und
priorityName.
Die Erstellung des event Arrays ist komplett transparent. Trotzdem wird das
Wissen über das event Array für das Hinzufügen von Elementen benötigt, die in dem
obigen Standardset nicht existieren.
Um ein neues Element für jedes zukünftige Event hinzuzufügen, muß die setEventItem() Methode aufgerufen werden wobei ein Schlüssel und ein Wert übergeben wird:
pid heißt und veröffentlicht
es mit der PID des aktuellen Prozesses. Wenn einmal ein neues Element gesetzt wurde, wird es
automatisch für alle Writer verfügbar, zusammen mit allen anderen Daten der Eventdaten wärend
des Protokollierens. Ein Element kann jederzeit überschrieben werden durch nochmaligen Aufruf
der setEventItem() Methode.
Das Setzen eines neuen Eventelements mit setEventItem() führt dazu das das neue Element an alle Writer des Loggers gesendet wird. Trotzdem garantiert das nicht das die Writer das Element aktuell auch aufzeichnet. Und zwar deswegen weil die Writer nicht wissen was zu tun ist solange das Formatter Objekt nicht über das neue Element informiert wurde. Siehe in die Sektion über Formatter um mehr darüber zu lernen.
| Zend_Log |
