php.de

Zurück   php.de > Lösungen durch Skripte > Scriptbörse

Scriptbörse PHP Lösungen für nen schmalen Taler

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.03.2011, 15:52  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard Logger

Um mal was beizutragen, habe ich mal den Logger aus meinem Framework extrahiert und biete den hier zum Download an. Vielleicht kann es ja jemand gebrauchen. Ich habe ihn schon mal vor einiger Zeit in einem anderen Forum gepostet, aber es kann ja nicht schaden, das hier auch noch mal zu tun.

Achtung: Für etliche der Profis hier wird der eine oder andere Aspekt nicht optimal zu sein. Das ist allerdings der Tatsache geschuldet, dass das Skript ohne viel Aufwand und mit möglichst wenigen Anforderungen einsetzbar sein soll.

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
Dateityp: zip ZN_Log.zip (4,0 KB, 11x aufgerufen)

Geändert von xm22 (17.03.2011 um 16:16 Uhr). Grund: BB-Fehler korrigiert
xm22 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.03.2011, 16:12  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.838
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Klasse ! Werde ich gleich mal testen und ein Feedback dazu geben!


Greetz Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 18.03.2011, 23:19  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Erinnert mich spontan sehr stark an Zend_Log mit den diversen Writern...wobei es dort auch ein Wildfire-Plugin gibt.
Was jetzt aber keine Kritik an deiner Arbeit sein soll, ich hab sie mir nicht angesehen.
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 19.03.2011, 17:31  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Nee, stimmt schon. Die Inspiration kam auch von daher


EDIT: Zur Erklärung: Das Skript war ursprünglich für einen Freund als einfache, aber praktische Einführung in OOP gedacht. Es hat sich dann aber eben als recht praktisch erwiesen.

Geändert von xm22 (20.03.2011 um 12:54 Uhr).
xm22 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ansatz für Einbinden einer Funktion in mehrere Klassen binäri PHP Tipps 2009 9 20.07.2009 21:31
parameter von interfaces in klassen richtig mit anwenden? litterauspirna PHP Tipps 2009 27 30.06.2009 20:58
Welchen Counter / Tracker / Logger benutzt ihr? mercurio PHP-Fortgeschrittene 5 09.01.2006 16:58
IP Logger + .txt ausgabe (gibt nur in einer zeile aus !?) PHP Tipps 2005 6 08.01.2005 16:43
[Erledigt] Text File Logger PHP Tipps 2004 2 04.08.2004 09:58

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
logger php, php5 logger, php code logger, logger.php download

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:21 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum