( jc – 21.03.2011 15:52)

PHP: casual error_reporting via Geektool & Growl

Nachdem ich regelmäßig das Problem hatte, mir mit irgendwo willkürlich gesetzten und dann im Code vergessenen display_error Direktiven selbst das Leben schwer zu machen – ein per script ausgegebenes JS mit notices dazwischen ist z.b. schlicht kaputt – habe ich über alternative Wege nachgedacht, wie ich die PHP Fehlermeldung jederzeit und einfach im Blick haben, und gleichzeitig aber automatisch über auftretende Fehler informiert werden könnte..

Geektool & Growl

Während Growl in der Mac-Gemeinde schon fast als Standard angesehen werden kann, führt Geektool eher ein Nischendasein.. Geektools Kern-Funktion ist das Anzeigen von Daten auf dem Desktop. Dafür kann Geektool verschiedene Quellen anzapfen, u.a. anderem eben auch logfiles.

Die Einrichtung von Geektool ist ziemlich selberklärend, insofern will ich da nicht groß drauf eingehen, für meine Zwecke habe ich (siehe screenshot) 3 logfiles von MAMP angezapft: Apache, MySQL und eben PHP.

LaunchAgent -> Bash script -> Growl

Der etwas trickreichere Teil ist es Growl so einzurichten, daß es einem PHP Fehlermeldungen ausgibt. Die Grundfunktionaltität und deren Einrichtung wird in diesem Artikel hinreichend beschrieben: how-to-get-growl-notifications-from-crashplan D.h. ich zeige hier nur noch die Unterschiede hinsichtlich kleinerer Details wie der konkreten MAMP Pfade, bzw. einen kleinen edit am bash script, der einen (10.5.8 spezifischen?) bug umschifft, wo Fehlermeldungen öfters mal doppelt an Growl gesendet werden.

Das bash script

Das script ist für die spezifischen MAMP Pfade angepaßt, und dahingehend aufgebohrt (thx an tk btw.), daß wg. des erwähnten bugs die Fehlermeldung mit der vohergehenden verglichen wird, um sicherzustellen, daß einunddieselbe Fehlermeldung eben nicht doppelt ausgegeben wird. Das script habe ich hier bei mir unter folgendem Pfad gespeichert:
/Users/USERNAME/bin/tail_php_error_log_to_growl

#!/bin/bash
touch /tmp/php_error.log
test 
-/tmp/php_error.log && (echo "Detected symlink. Exiting" >&2; exit 1)
RecentLog="$(tail -n1 /Applications/MAMP/logs/php_error.log)"
read PreviousLog </tmp/php_error.log
if [ "X${RecentLog}!= "X${PreviousLog}]; then
    
echo "${RecentLog}>/tmp/php_error.log
    
/usr/local/bin/growlnotify -a MAMP -"${RecentLog}"
fi
 

( jc – 21.03.2011 15:52)

PHP: casual error_reporting via Geektool & Growl

Nachdem ich regelmäßig das Problem hatte, mir mit irgendwo willkürlich gesetzten und dann im Code vergessenen display_error Direktiven selbst das Leben schwer zu machen – ein per script ausgegebenes JS mit notices dazwischen ist z.b. schlicht kaputt – habe ich über alternative Wege nachgedacht, wie ich die PHP Fehlermeldung jederzeit und einfach im Blick haben, und gleichzeitig aber automatisch über auftretende Fehler informiert werden könnte..

Geektool & Growl

Während Growl in der Mac-Gemeinde schon fast als Standard angesehen werden kann, führt Geektool eher ein Nischendasein.. Geektools Kern-Funktion ist das Anzeigen von Daten auf dem Desktop. Dafür kann Geektool verschiedene Quellen anzapfen, u.a. anderem eben auch logfiles.

Die Einrichtung von Geektool ist ziemlich selberklärend, insofern will ich da nicht groß drauf eingehen, für meine Zwecke habe ich (siehe screenshot) 3 logfiles von MAMP angezapft: Apache, MySQL und eben PHP.

LaunchAgent -> Bash script -> Growl

Der etwas trickreichere Teil ist es Growl so einzurichten, daß es einem PHP Fehlermeldungen ausgibt. Die Grundfunktionaltität und deren Einrichtung wird in diesem Artikel hinreichend beschrieben: how-to-get-growl-notifications-from-crashplan D.h. ich zeige hier nur noch die Unterschiede hinsichtlich kleinerer Details wie der konkreten MAMP Pfade, bzw. einen kleinen edit am bash script, der einen (10.5.8 spezifischen?) bug umschifft, wo Fehlermeldungen öfters mal doppelt an Growl gesendet werden.

Das bash script

Das script ist für die spezifischen MAMP Pfade angepaßt, und dahingehend aufgebohrt (thx an tk btw.), daß wg. des erwähnten bugs die Fehlermeldung mit der vohergehenden verglichen wird, um sicherzustellen, daß einunddieselbe Fehlermeldung eben nicht doppelt ausgegeben wird. Das script habe ich hier bei mir unter folgendem Pfad gespeichert:
/Users/USERNAME/bin/tail_php_error_log_to_growl

#!/bin/bash
touch /tmp/php_error.log
test 
-/tmp/php_error.log && (echo "Detected symlink. Exiting" >&2; exit 1)
RecentLog="$(tail -n1 /Applications/MAMP/logs/php_error.log)"
read PreviousLog </tmp/php_error.log
if [ "X${RecentLog}!= "X${PreviousLog}]; then
    
echo "${RecentLog}>/tmp/php_error.log
    
/usr/local/bin/growlnotify -a MAMP -"${RecentLog}"
fi