Frameworkunabhängige Fehlerberichtung mit PHP und Redmine

Mittwoch, 08. Februar 2012, 12:07 Uhr

Webanwendungen sind Software, und damit prinzipbedingt fehlerbehaftet. Wenn nun ein Fehler bei einem Nutzer bzw. Kunden auftritt, wäre es wünschenswert, wenn wir als Entwickler zumindest davon erfahren. Für unsere *Ruby on Rails*-Anwendungen (z.B. "Empfehlungsbund.de":http://www.empfehlungsbund.de) nutzen wir seit einiger Zeit den Service von *Airbrake*, die ein leicht zu installierendes Plugin anbieten. Nun suchten wir für *PHP* etwas ähnliches. Da wir aber mittlerweile sehr viele PHP-Anwendungen hatten, kam die Motivation auf: * Ähnliches auch für PHP umzusetzen * die Fehler an unser eigenes System zu melden, um unabhängig von externen Dienstleistern zu sein. * Das Ganze in einen Workflow zu bringen, sodass Fehler nicht vergessen werden h3. Nutzung von Redmine als Bug-API-Server Intern nutzen wir bereits den Bugtracker "*Redmine*":http://www.redmine.org/ (der übrigens auch auf Ruby on Rails basiert), der uns durch die vielen Features, inklusive z.B. einer Zeiterfassung, einer API zum automatischen Anlegen von Tickets und Android Apps (RedMinerDroid) überzeugt hat. Glücklicherweise gibt es bereits ein "Plugin für Redmine – Redmine Airbrake Server":https://github.com/milgner/redmine_airbrake_server, dass aus dem Bugtracker auch einen Airbrake-Bug-Server macht. Letztendlich sieht es so aus, dass ein Fehler ein Ticket im Bugtracker erzeugt, bzw. ein bestehendes aktualisiert, wenn ein Fehler wieder aufgetreten ist. Das ganze funktioniert sehr gut, auch wenn man natürlich Abstriche beim Informationsgehalt und der Aufbereitung machen muss, der bei kommerziellen Services wie Airbrake oder Newrelic natürlich besser ist. Nichtsdestotrotz bleibt man über den Status der Anwendung auf dem Laufenden, und erhält die notwendigen Informationen (Stacktrace, Fehlerdokument, URL und Session-Parameter) h3. Umbau der Client-Bibliotheken Da dieses Plugin die Airbrake-API emuliert, lassen sich die dafür geeigneten Plugins meist relativ leicht so umbauen, dass sie nun stattdessen zum Bugtracker funken. Für das Rails-Plugin ist dies bereits auf der Githubseite des Airbrake Redmine Plugins dokumentiert. Für PHP haben wir das so gelöst: * Download der "Airbrake-Notifer-PHP-Bibliothek":https://github.com/geoloqi/php-airbrake-notifier * ca. Zeile 190 in der Services/Airbrake.php die URL anpassen:

$url = "http://mybugtracker.domain.de/notifier_api/v2/notices";

* an geeigneter Stelle im Programmcode (z.B. neues Modul, Klasse etc.) wiefolgt aufrufen:

require_once 'php-airbrake-notifier/Services/Airbrake.php'; $api_key = Fertig :) Ab nun trudeln alle Mails als Tickets ein. Wenn Redmine richtig konfiguriert ist, dann bekommen alle Projektbeobachter Mails, sobald neue Tickets angelegt werden, bzw. Fehler auftraten.