Konzeptionell: Debugging von PHP-Applikationen im Live-Betrieb
Ich habe immer häufiger den Fall, dass es keine Entwicklungsumgebung mit Deployment sondern lediglich eine Live-Umgebung gibt in der Applikationen debuggt werden müssen.
Allerdings ist es ja etwas unschön, wenn die Besucher einer vielbesuchten Webseite merkwürdige Array-Ausgaben [var\_dump(), print\_r()] zu Gesicht bekommen. Das darf natürlich nicht sein.
Deshalb hier mal die Frage in die Runde: Wie debuggt ihr solche Applikationen, ohne dass Besucher etwas davon mitbekommen? Danke für Eure Tipps!
Antworten
Ich setze einen Logger mit mehreren Writern ein:
- Logfile
- Direktausgabe
Desweiteren setze ich auf verschiedene Loglevel:
EMERG // Emergency: system is unusable
ALERT // Alert: action must be taken immediately
CRIT // Critical: critical conditions
ERR // Error: error conditions
WARN // Warning: warning conditions
NOTICE // Notice: normal but significant condition
INFO // Informational: informational messages
DEBUG // Debug: debug messages
Der Clou an der Sache ist, das die verschiedenen Writer auf verschiedene Level "hören"
- Logfile schreibt alle Level ins Log
- Eine E-Mail wird erst ab dem Level "error" versendet
- Die Direktausgabe erfolgt ab dem Level "warn" und nur auf dem Development System
Somit bekomme ich immer mit was wo los ist und kann mir in jedem Fall detailierte Informationen holen, da z.B. das Logfile immer alle Einträge enthält.
Mann kann sich zum besispiel eine eigene php log daei anlegen:
ini_set('error_log', 'logfile.log');
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
und dann mit
trigger_error() arbeiten.
ich arbeite mir einer Abfrage, die dies Ausgaben des Debugging nur für bestimmte User erlaubt; in der Regel frage ich dabei ein Objekt ab, was nur diese/der User hat und geben aus. Geht schnell und erfordert wenig Aufwand.
Ansonsten schiebe ich diverse Sachen in den Log (via php.ini); läßt aber beim Debugging nicht genug Freiheit zu.
Zum Teil schiebe ich die Ausgabe des Debugging auch in eine Konsole, bspw. mittels FirePHP in Firefox und Firebug. Dazu gibt es auch andere Ansätze, die ich allerdings nie im Livebetrieb genutzt habe. Dabei ist mir DebugConsole aufgefallen, aber wie gesagt nur in der Dev-Umgebung genutzt.
Ich benutze häufig diese Zeile, wenn es schnell gehen soll:
file_put_contents('/tmp/php.log', print_r($var, true), FILE_APPEND | LOCK_EX);
Nicht schick aber wirksam. Und funktioniert immer, auch ohne die php.ini anfassen oder Logging-Bibliotheken einbinden zu müssen.
Wenn du Zugriff auf die PHP.INI hast, kannst du ja auch XDEBUG benutzen und mit Netbeans direkt REMOTE debuggen.
Hast du es geschafft, das bei XAMPP mit Windows einzurichten? Ich versuch es jedes Jahr auf neue doch es klappt nie.
– kevin am 23.02.2012Ich hab letztens gelesen, dass einer sich die Debug Infos per Mail jedes Mal zusenden lässt...
etwas crazy, aber es tut seinen Zweck...
Als ziemlich simple und Browserabhängige Alternative könnte man sich in einem versteckten div die Ausgabe liefern lassen, oder?
<div style="display:none;">Testausgabe</div>
dann ist es wohl einfacher diese in die Kommentare in HTML <!-- debug info --> zu schreiben. Per Mail? Infos über Probleme wie 404 oder log-fehler, aber Debuggings-Infos braucht man doch beim Tun.
– frank am 20.01.2012Deine Antwort
Bereits registriert? Bitte logge dich vor dem Antworten ein.

Von Usern veröffentlichte Inhalte stehen unter der
Cool, das kannte ich noch gar nicht. Habe bisher immer auf Basis meines Users oder meiner IP-Adresse Ausgaben nur für mich selbst gemacht.
– jkahn am 20.01.2012