Introduction to Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  •  Zend_Gdata
  •  Zend_Http
  •  Zend_InfoCard
  •  Zend_Json
  •  Zend_Layout
  •  Zend_Ldap
  •  Zend_Loader
  •  Zend_Locale
  •  Zend_Log
  •  Zend_Mail
  •  Zend_Markup
  •  Zend_Measure
  •  Zend_Memory
  •  Zend_Mime
  •  Zend_Navigation
  •  Zend_Oauth
  •  Zend_OpenId
  •  Zend_Paginator
  •  Zend_Pdf
  •  Zend_ProgressBar
  •  Zend_Queue
  •  Zend_Reflection
  •  Zend_Registry
  •  Zend_Rest

  •  Zend_Search_Lucene
  •  Zend_Serializer
  •  Zend_Server
  •  Zend_Service
  •  Zend_Session
  •  Zend_Soap
  •  Zend_Tag
  •  Zend_Test
  •  Zend_Text
  •  Zend_TimeSync
  •  Zend_Tool
  •  Zend_Tool_Framework
  •  Zend_Tool_Project
  •  Zend_Translate
  •  Zend_Uri
  •  Zend_Validate
  •  Zend_Version
  •  Zend_View
  •  Zend_Wildfire
  •  Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 96.1% Update 2010-11-28 - Revision 23448 - Version ZF 1.11.x

    Chapter 44. Zend_Log

    Table of Contents

    44.1. Übersicht
    44.1.1. Erstellen eines Logs
    44.1.2. Nachrichten protokollieren
    44.1.3. Ein Log entfernen
    44.1.4. Verwenden von eingebauten Prioritäten
    44.1.5. Hinzufügen von selbstdefinierten Prioritäten
    44.1.6. Log Events verstehen
    44.1.7. PHP Fehler loggen
    44.2. Writer
    44.2.1. In Streams schreiben
    44.2.2. In Datenbanken schreiben
    44.2.3. An Firebug schreiben
    44.2.3.1. Setzen von Stilen für Prioritäten
    44.2.3.2. Daten für das Loggen vorbereiten
    44.2.3.3. Loggen von Ausnahmen
    44.2.3.4. Tabellen loggen
    44.2.4. In Emails schreiben
    44.2.4.1. Zend_Layout Verwendung
    44.2.4.2. Zusammenfassung der Fehlerlevel in der Subjektzeile
    44.2.4.3. Vorbehalte
    44.2.5. In das Systemlog schreiben
    44.2.6. Auf den Zend Server Montior schreiben
    44.2.7. Einen Writer abstumpfen
    44.2.8. Mit der Attrappe testen
    44.2.9. Gemischte Writer
    44.3. Formatter
    44.3.1. Eingache Formatierung
    44.3.2. In XML formatieren
    44.4. Filter
    44.4.1. Filter für alle Writer
    44.4.2. Filtern für eine Writer Instanz
    44.5. Die Factory verwenden um ein Log zu erstellen
    44.5.1. Writer Optionen
    44.5.1.1. Zend_Log_Writer_Db Optionen
    44.5.1.2. Zend_Log_Writer_Firebug Optionen
    44.5.1.3. Zend_Log_Writer_Mail Optionen
    44.5.1.4. Zend_Log_Writer_Mock Optionen
    44.5.1.5. Zend_Log_Writer_Null Optionen
    44.5.1.6. Zend_Log_Writer_Stream Optionen
    44.5.1.7. Zend_Log_Writer_Syslog Optionen
    44.5.1.8. Zend_Log_Writer_ZendMonitor Optionen
    44.5.2. Filter Optionen
    44.5.2.1. Zend_Log_Filter_Message Optionen
    44.5.2.2. Zend_Log_Filter_Priority Optionen
    44.5.2.3. Zend_Log_Writer_Suppress Optionen
    44.5.3. Erstellen konfigurierbarer Writer und Filter

    44.1. Ü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.

    44.1.1. 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);

    Es ist wichtig anzumerken dass das Log mindestens einen Writer haben muß. Man kann eine beliebige Anzahl von Writern hinzufügen indem man die addWriter() Methode des Log's verwendet.

    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);

    Das Log ist nun fertig zur Verwendung.

    44.1.2. 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);

    Der erste Parameter der log() Methode ist ein 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');

    44.1.3. 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;

    Das explizite entfernen des Logs auf diesem Weg ist optional und wird automatisch durchgeführt wenn PHP herunterfährt.

    44.1.4. 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

    Diese Prioritäten sind immer vorhanden und eine komfortable Methode für den selben Namen ist für jede einzelne vorhanden.

    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.

    44.1.5. 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);

    Das obige Codeschnipsel erstellt eine neue Priorität, 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');

    Neue Prioritäten können bereits bestehende nicht überschreiben.

    44.1.6. 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:

    $logger->setEventItem('pid'getmypid());

    Das obige Beispiel setzt ein neues Element welches 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 dass 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.

    44.1.7. PHP Fehler loggen

    Zend_Log kann auch verwendet werden um PHP Fehler zu loggen. Der Aufruf von registerErrorHandler() fügt Zend_Log vor dem aktuellen Error Handler hinzu, und gibt den Fehler genauso weiter.

    Table 44.1. Zend_Log Events für PHP Fehler haben ein zusätzliches Feld welches handler (int $errno ,string $errstr [,string $errfile [,int $errline [,array $errcontext]]]) von set_error_handler entspricht

    Name Parameter für den Error Handler Beschreibung
    message errstr Enthält die Fehlermeldung als String.
    errno errno Enthält das Level des geworfenen Fehlers als Integer.
    file errfile Enthält den Dateinamen in dem der Fehler geworfen wurde als String
    line errline Enthält die Zeilennummer in welcher der Fehler geworfen wurde als Integer
    context errcontext (Optional) Ein Array welches auf eine aktive Symboltabelle zeigt in welcher der Fehler aufgetreten ist. In anderen Worden, enthält errcontext ein Array jeder Variable welche in dem Scope existiert hat in welchem der Fehler geworfen wurde. Benutzerdefinierte Error Handler müssen den Error Context nicht verändern.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...