Ergebnis 1 bis 1 von 1

Thema: Variabler Logger

  1. #1
    TP-Veteran
    Registriert seit
    May 2006
    Beiträge
    1.572

    Variabler Logger

    Ein Logger mit verschiedenen Ausgabemöglichkeiten
    Wer braucht so etwas?
    Viele kennen das Problem: Man will irgendwo Ausgaben machen, vielleicht auch Fehler oder Exceptions mitloggen. Das Unbequeme: Auf einem Live-System will man die Fehler nicht unbedingt wie auf dem Entwicklungs-System direkt am Bildschirm ausgeben, sondern in Dateien schreiben oder per E-Mail senden. Hier setzt jetzt mein Logger an.
    Wie funktioniert's?
    Im Prinzip ganz einfach: Man erstellt eine Instanz des Loggers (normal per new oder als Singleton -> Wikipedia-Eintrag) und weist dieser Instanz sogenannte Writer zu.
    PHP-Code:
    //Die Instanziierung per Singleton:
        
    $log ZN_Log::instance(); 
    Dazu kann man dem Logger verschiedene "Channels" zuweisen. Darunter versteht man verschiedene Stufen, wie kritische Fehler, Warnungen, Debug-Ausgaben u. ä.. Jeder Writer erhält abhängig verschiedene Parameter; einer muss allerdings immer vorhanden sein: Die Formatierung.
    Diese wird später von sprintf benutzt, um die Ausgabe zu formatieren. Momentan sind drei verschiedene Writer implementiert:
    PHP-Code:
        //Ausgabe auf dem Bildschirm
        
    $log->addWriter('ERROR', new ZN_Log_Writer_Screen(array('format'=>"%1\$s [%2\$s]<br />--------------------------------------------------------------------------------<br />%3\$s<br />--------------------------------------------------------------------------------<br/><br />")));
        
        
    //Nachrichten in eine Datei schreiben (Hier wird als zusätzlicher Parameter eine Log-Datei benötigt)
        
    $log->addWriter('ERROR', new ZN_Log_Writer_File(array('file'=>dirname(__FILE__).'/test.log''format'=>"%1\$s [%2\$s]\n--------------------------------------------------------------------------------\n%3\$s\n--------------------------------------------------------------------------------\n\n")));
        
        
    //Versenden der Nachrichten per E-Mail
        
    $log->addWriter('ERROR', new ZN_Log_Writer_Mail(
            array(
                
    'recipients'=>array(
                    
    'test@example.com'
                
    ),
                
    'from'=>'test@example.com',
                
    'subject'=>'Ein Fehler ist aufgetreten',
                
    'format'=>"%1\$s [%2\$s]\n--------------------------------------------------------------------------------\n%3\$s\n--------------------------------------------------------------------------------\n\n")
            )
        ); 
    Der Mail-Writer ist bisher nur rudimentär implementiert. Hier bietet es sich in Zukunft an, eine fertige Mailer-Klasse wie z. B. Zend_Mail zu benutzen. Außerdem sollte man hier einen Mechanismus umsetzen, der dafür sorgt, dass die Nachrichten erst am Ende des Skripts in einem Rutsch gesendet werden, da sonst im schlimmsten Fall jede Nachricht einzeln gesendet wird.

    Es gibt drei verschiedene Platzhalter für den format-Parameter:

    %1$s bzw. %1\$s -> Der Channel (ERROR, DEBUG, Was auch immer)
    %2$s bzw. %2\$s -> Zeitpunkt
    %3$s bzw. %3\$s -> Der zu loggende Wert

    Das Triggern einer Nachricht ist letztendlich ganz einfach:
    PHP-Code:
        $log->log('ERROR''Ein Fehler ist aufgetreten'); 
    Der erste Parameter ist der Channel (In diesem Fall "ERROR"). Hier ist das Prinzip der verschiedenen Channels gut zu erkennen. Da man jedem Channel einzeln Writer zuweisen kann, hat man z. B. die Möglichkeit, bei Warnungen nur eine Log-Datei zu benutzen, bei schwerwiegenden Fehlern (Z. B. Fehler in der Datenbank) den Fehler direkt per Mail-Writer an eine E-Mail zu senden.

    Der zweite Parameter ist der zu loggende Inhalt. Das kann jede Art von Datentyp sein (Arrays, Strings, Zahlen, Objekte).

    Als optionalen dritten Parameter kann festgelegt werden, ob die Nachricht direkt ausgegeben/geschrieben/versandt werden soll, oder ob sie in einem Puffer zwischengespeichert werden soll. Dies kann hilfreich sein, wenn man alle Meldungen auf einmal angezeigt, versendet haben möchte.

    Eine weitere Funktion des Loggers ist flushOnShutdown. Wird diese Funktion aufgerufen, registriert der Logger eine separate Flush-Funktion beim Beenden des Skripts, so dass in jedem Fall alle noch vorhandenen Nachrichten ausgegeben werden. Diese wird so aufgerufen:
    PHP-Code:
        $log->flushOnShutdown(); 
    Dadurch, dass der Logger komplett objektorientiert aufgebaut ist, ist es einfach, eigene Writer zu schreiben. Diese müssen lediglich von der Klasse ZN_Log_AWriter erben und um nach Bedarf erweitert werden.

    War's das?
    Ja - das war's Ich habe den kompletten Mechanismus möglichst einfach gehalten, damit er entsprechend stabil und einfach zu benutzen ist. Ich hoffe, einige Leute können es gebrauchen. Mir hat er schon oft geholfen. Ein Skript zum Testen liegt mit dabei. PHP5 wird vorausgesetzt.

    P.S.: Beim File-Writer muss natürlich darauf geachtet werden, dass PHP überhaupt die Rechte hat, in diese Datei zu schreiben.

    Wenn noch etwas offen ist, einfach fragen
    Angehängte Dateien Angehängte Dateien
    ...Meine Meinung

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. hilfe bei remote variabler
    Von mzuske im Forum Content Management Systeme & Shop Systeme
    Antworten: 0
    Letzter Beitrag: 29.03.2009, 22:51
  2. [MySQL] Variabler Sortierparameter in Datenbanksuche
    Von TAX im Forum Traum-Dynamik
    Antworten: 7
    Letzter Beitrag: 30.07.2008, 14:47
  3. [CSS] Variabler Hintergrund
    Von Tom im Forum HTML & CSS
    Antworten: 12
    Letzter Beitrag: 16.08.2007, 13:43
  4. Variabler Dateiname?!Bitte hilfe!
    Von oomeisteroo im Forum Photoshop
    Antworten: 0
    Letzter Beitrag: 17.02.2004, 15:51
  5. variabler name für Variable
    Von reetosh im Forum Traum-Dynamik
    Antworten: 1
    Letzter Beitrag: 08.08.2001, 23:26

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51