Konzeptionell: Debugging von PHP-Applikationen im Live-Betrieb
20.01.2012 08:51 Uhr
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!
6 Antworten
#1
20.01.2012 09:14 Uhr
|
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.
|
#2
20.01.2012 09:15 Uhr
|
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.
|
#3
20.01.2012 14:21 Uhr
|
Ich 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>
|
|
#4
21.01.2012 18:12 Uhr
|
Ich setze einen Logger mit mehreren Writern ein:
- Logfile
- E-Mail
- 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.
|
#5
22.01.2012 16:10 Uhr
|
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.
|
#6
22.02.2012 17:52 Uhr
|
Wenn du Zugriff auf die PHP.INI hast, kannst du ja auch XDEBUG benutzen und mit Netbeans direkt REMOTE debuggen.
|
Ähnliche Fragen
|