Logging mit Zend_Log und FireBug

| 12 Kommentare

Wenn man eine Anwendung entwickelt oder pflegt ist man auf ein aussagekräftiges Logging angewiesen. Das Zend Framework bietet bekanntlich mit Zend_Log eine sehr flexible Lösung an.

Ein sicherlich häufig verwendeter Writer ist der Stream-Writer (Zend_Log_Writer_Stream) zum Schreiben in Dateien. Wer jedoch nicht permanent ein Putty-Fenster mit tail -f auf das Logfile offen haben will, der kann sich die Ausgaben zusätzlich auch an das Firefox Plugin FireBug schicken lassen.

Die Erweiterung der Anwendung ist denkbar einfach. Ich gehe einfach mal davon aus, dass irgendwo (oft in der Bootstrap) der Zend-Logger initialisiert wird.

<?php
$logger = new Zend_Log();

$writerStream = new Zend_Log_Writer_Stream('/pfad/zur/datei');
$logger->addWriter($writerStream);

Ab hier können nun beliebige Informationen geloggt werden und landen in der angegebenen Datei.

Um die Ausgabe zusätzlich im FireBug zu bekommen, müssen wir nur einen weiteren Writer hinzufügen.

<?php
$writerFirebug = new Zend_Log_Writer_Firebug()
$logger->addWriter($writerFirebug);

Nebenbei bemerkt könnten so nun diverse Writer gleichzeitig die Ausgaben verarbeiten. Mehr Information gibt es dazu in der Zend Dokumentation.

Zuletzt müssen jetzt noch die Firefox-AddOns FireBug und FirePHP installiert werden und wir bekommen unsere Ausgaben in der aktivierten Konsole zu sehen.

Wichtig bei der Verwendung ist, dass das FireBug-Logging nicht im Live-Betrieb aktiviert ist, weil sonst jeder an die Informationen kommen kann

12 Kommentare

  1. Die Möglichkeit mit FireBug sein Code-Log mitzulesen ist ne super sache. Kommt sehr nah an ein natives Debugging heran, vorausgesetzt man loggt die nötigen Informationen. Toll ist das ganze natürlich im Zusammenhang mit verschiedenen Funktionen welche zB beim Ende der Ausführung einen Dump macht. So spart man sich zum Teil auch das manuelle einrichten einer Log-Zeile :)

  2. FirePHP ist eine super Sache, wenn man nicht die logs mit tail -f anschauen möchte. Man sollte aber darauf achten, dass die Performance der Seite darunter leidet, da die Daten ja zum Client übertragen werden müssen. Sollte eigentlich logisch sein, aber ich sehe schon, wie der nächste Projektleiter angelaufen kommt und sich über die Performance beschweren, weil er zufällig FireBug geöffnet hat :D

  3. Ich persönlich find ja die ZFDebug Bar ganz hilfreich. Dort gibt es auch ein Log Plugin. Und nebenbei noch viele andere sinnvolle Features. Btw: Das Logging Feature ist nicht offiziel dabei. Einfach im Bugtracker suchen.

  4. @Norbert: Das die Geschwindigkeit ab einem gewissen Logaufkommen leidet kann ich mir gut vorstellen. Persönlich lese ich auch einfach nur mit “tail -f” die Logs aus.

  5. Hi Jungs,
    ich habe das so gelöst, das ich im Firefox einen eigenen User-Agent eingestellt habe. Damit erkenne ich mich und gebe somit nur dann die Firebug-Logs aus. So bekommt auch der User keine unnötigen Logs und das Performance-Problem wäre damit auch gelöst.

    Loggen mit Firebug ist echt eine coole Sache!

  6. Hallo Leute,

    wenn ich folgenden Code verwende erhalte ich eine leere Seite im Firefox; wenn ich die Zeilen 6,7,8 auskommentiere, wird die Seite wieder mit Inhalt angezeigt. Woran liegt das? Wenn ich auf der Konsole (unter Linux) den Code manuell mit “php index.php” ausführe, klappt alles – das Logfile wird angelegt und geschrieben.

    1 <?php
    2 require_once(‘/usr/share/php5/Zend/Log.php’);
    3 require_once(‘/usr/share/php5/Zend/Log/Writer/Stream.php’);
    5 $logger = new Zend_Log();
    6 $writer = new Zend_Log_Writer_Stream(‘/srv/www/htdocs/sample.log’);
    7 $logger->addWriter($writer);
    8 $logger->log(‘sample message!’, Zend_Log::INFO);
    9?>

  7. @Mike: Fehlende Schreibrechte? Ist error_reporting bzw. display_erros an?
    @BennyGrimm: Klingt für mich nach Security by Obscurity und nach keiner guten Lösung.

  8. Also geht ja nicht nur um die Performance für den User. Die Logging-Ausgaben können ja auch für einen Angriff genutzt werden.

  9. @digilist: ich dachte, das Zend_log ist gerade zum Logging gedacht? Was für eine Lösung könnte man verwenden, wenn man eine php-Anwendung loggen möchte? Wo schaltet man error_reporting bzw. display_erros an?

  10. @Mike: Ja, es ist fürs Logging da, aber nicht direkt fürs Error-Logging. Das kann man implementieren, aber in erster Linie geht es darum, dass du deine eigenen Nachrichten loggen kannst.
    error_reporting kannste über die Funktion error_reporting() aktivieren (z.B. error_reporting(E_ALL);) und display_errors kannst du in der php.ini bzw. über ini_set() aktivieren: ini_set(‘display_errors’ ‘On’);

  11. @Mike: ich möchte ja meine eigenen Nachrichten loggen! Genau darum geht es. Habe ich das falsch angepackt?

  12. @Mike: Wenn du das Script auf der Konsole startest, dann führst du es in der Regel als der jeweilige Benutzer. Der Server startet es jedoch als ein anderer Nutzer (z.B. www-data). Daher könnte das, wie schon erwähnt, ein Rechteproblem sein.

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.


Schlagwörter: A/B-Test, AbstractType, Adapter, AddOn, Administration, Ajax, Amazon, Animation, Annotations, Anonyme Klasse, Ant, Apache, API, Array, ArrayAccess, Attachment, Auftrag, Ausbildung, Auswertung, Authentifizierung, AutoLoader, AWS, Bedienung, Bedingung, Benchmark, Berechtigung, Berlin, Bildbearbeitung, Bildschirmfoto, Blog, Blogroll, BOM, Bootstrap, Bot, Browser, Bugtracker, Byte Order Mark, Bücher, Cache, CakePHP, Call-Center, Callback, CamelCase, Canvas, Captcha, CDN, Cheatsheet, CLI, Clickout, Closure, Cloud, CodeSniffer, Collection, Community, Comparator, Config, Contest, Controller, Converter, CouchDB, Countable, Cronjob, CRUD, CSS, CSV, CustomLibrary, Custom_Model, Daemon, Data Mapper, Datei, Datenbank, Datenstruktur, Datentypen, Dating, Datum, Debug, Decorator, Dekorierer, Design, Design Patterns, Doctrine, Dokumentation, Dump, Duplikat, each, EC2, Eclipse, Email, Entwicklung, Entwurfsmuster, Enum, Erweiterung, Event, Eventhandling, Exception-Handling, Extension, Facebook, Factory, Fallback, Fehler, Fehlermeldung, Filter, Firefox, Flash, flexigrid, Foreach, Formatierung, Formular, Framework, FTP, Funktion, Futon, ga:pi(), Getter, Google Analytics, Hash, Hash-Bang, Header, htaccess, HTML5, htpasswd, HTTP, HTTPS, IDE, If, Implementierung, InnoDB, Interceptor, Interface, Internet Explorer, isset, Iterator, Java, JavaScript, Job, jQuery, Kommentar, Konfiguration, Konsole, Kontrollstruktur, kopieren, kostenlos, Kundenbetreuung, Late Static Binding, Layout, Links, Linux, Listeners, Lizenz, Logging, Löschen, Magento, Magic Methods, Manual, ManyToMany, Marketing, Methode, Model, Monolog, MVC, MySQL, NetBeans, Network, Nirvanix, Objekt, Observable, Observer, OneToMany, Online Tool, OOP, Open Source, Operator, OR-Mapper, Order, ORM, O’Reilly, Parameter, Partnersuche, Passwort, Performance, PHP, php.ini, PHP hates me, phpMyAdmin, PHPUnit, Plugin, Popup, Proxy, Prüfsumme, Prüfung, QR-Code, Qualitätssicherung, Query, Queue, Redesign, Refactoring, Reflection, Request, Response, Responsive Design, Rest-API, Rockstar, Rollback, Routing, S3, Samba, Scheifen, Schleife, Schutz, Screenshot, Secure Shell, Selbstreferenz, Server, Setter, setTimeout, Shop, Sicherheit, Sicherung, Sichtbarkeit, Singleton Pattern, Skin, SOAP, Social Network, Software, Sortierung, Sourcecode, Spam, Speicherproblem, Spickzettel, SPL, Splittest, SSH, SSL, Stammtisch, Statement, static, Statistik, Status, Stellvertreter, Strategy Pattern, Stream, String, Stuttgart, Stylesheet, Subversion, Sun VirtualBox, Support, SVN, Switch, Symfony, Symfony2, Symfony Live, Tag, Template, Template Method, Ternär Operator, Testing, Theme, Thumbnail, Tool, Tour, Tracking, Twig, Twitter, Type-Cast, Ubuntu, Umwandlung, Underscore, unset, Update, Upload, Url, User Story, Validierung, Vererbung, Versionskontrolle, Versionsnummer, Verzweigung, Video, Videospiel, Virtualisierung, Visitor Pattern, Vorschaubild, walk, Warteschlange, Webserver, Webservice, Weiterleitung, Werkzeug, Windows, WindowsAzure, WordPress, Wrapper, Writer, XML, Youtube, Zeitschleife, Zeitsteuerung, Zend Framework, Zend_Application, Zend_Cloud, Zend_CodeGenerator, Zend_Http_Client, Zend_Reflection, Zend_Service, ZPress, Zugangskontrolle, Zugriffsmethode