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



Datenschutzerklärung · Impressum