Fehler und deren Behandlung in REDAXO

Fehler und deren Behandlung in REDAXO

Inhalt

  1. Version 0
    1. Vorteile
  2. Version 1
    1. Funktionen
    2. Error-Level-Auswahl
    3. Einstellungen im Development-Environment
    4. Einstellungen im Production-Environment
    5. Aufgetretene Fehler
    6. Ausgeführte SQL-Queries
    7. Fataler Fehler im Development-Environment
  3. Download

Nach einigen Wochen unangenehmer Entwicklungsarbeit sind wir jetzt endlich bereit, unser neues AddOn für REDAXO zu veröffentlichen: der Error Handler.

Version 0

Vor circa einem halben Jahr begannen wir damit, Fehler nicht mehr nur vom Kunden finden zu lassen oder zu ignorieren, sondern sie kontrolliert zu behandeln. Im ersten Anlauf (eine kleine Hau-Ruck-Lösung, ich geb's ja zu) haben wir ein extra Script in REDAXO injiziert, das sich als Error Handler (set_error_handler) ins System gehängt hat und bei jedem Fehler (darin sind auch Warnungen und Hinweise eingeschlossen) eine eMail an uns schickte. Damit hatten wir einen durchaus brauchbaren Überblick über Fehler der Website, nachdem diese auf dem Server des Kunden gelandet ist. In der eMail waren neben IP, User-Agent, Zeitpunkt und weiteren statistischen Daten auch ein Stacktrace und der Inhalt der globalen $_GET, $_POST, $_COOKIE und $_SERVER enthalten. Ein Traum, wenn es an das Finden von Fehlern ging.

Vorteile

Das ganze brachte große Vorteile für alle, die am Projekt beteiligt waren:

Version 1

So toll die eMails auch sind, so schlecht sind sie integriert. Ist das Script einmal eingebunden, werden alle Fehler abgefangen. Macht man lokal Fehler, versucht PHP, eMails zu verschicken - unter Windows schlägt das i.d.R. aufgrund des fehlenden SMTP-Servers fehl. Auch die Konfiguration war etwas hakelig und unschön.

Um das ganze Konzept etwas in geregelte Bahnen zu lenken, haben wir uns entschlossen, die Funktionalität als AddOn neu umzusetzen. Bevor ich das grobe Konzept beschreibe, möchte ich vorher noch rumheulen, wie schlimm das war einen kleinen Hinweis geben:

Error Handler für PHP zu schreiben ist wie Liebe: Wenn möglich, vermeiden!1

Warum ist das so? Nun, man schreibt Code, der Fehler behandeln soll. Dumm nur, wenn im eigenen Code auch Fehler stecken. Dann muss der fehlerhafte Code sich selbst abfangen und managen. Das kann ja nur schiefgehen. Man ist also ständig gezwungen, den Error Handler teilweise abzuschalten, um zu prüfen, wo etwas nicht stimmt. Gerade, wenn Fehler nicht angezeigt werden sollen, wird's echt lästig. Aber genug rumgeheult.

Funktionen

Das AddOn stellt zwei Umgebungen zur Verfügung: Produktion und Entwicklung. Beziehungsweise Production und Development auf Neudeutsch.

Im REDAXO-Backend kann man einfach zwischen diesen Umgebungen wählen und diese auch gleich konfigurieren. Die Einstellungen sehen wie folgt aus (REDAXO 4.2.1):

Error-Level-Auswahl

Error-Level-Auswahl

Einstellungen im Development-Environment

Development-Environment

Einstellungen im Production-Environment

Production-Environment

Während die Overlays im Backend dann wie folgt aussehen:

Aufgetretene Fehler

(inklusive Stacktrace und fehlerhafter Codezeile)

Aufgetretene Fehler

Ausgeführte SQL-Queries

(inkl. EXPLAIN-Ergebnis für alle SELECT-Queries)

SQL-Log

Fataler Fehler im Development-Environment

(Design vollständig von symfony geklaut)

Fataler Fehler

Download

Wir sind zuversichtlich, mit diesem AddOn einen kleinen Beitrag zur Qualitätssicherung von Redaxo-Projekten zu leisten. Da der Error Handler nur einen Aufsatz auf REDAXO darstellt, kann man ihn einfach deaktivieren, falls er doch Probleme machen sollte (Ticket erstellen nicht vergessen!).

Das AddOn ist für REDAXO 4.1 und 4.2.x verfügbar und basiert auf unseren Developer Utils, die neben grundlegenden Funktionen auch das Backend von REDAXO leicht anpassen. Es wird unter MIT-Lizenz veröffentlicht. Für die Funktionalität im Frontend muss auf der Seite (zur Zeit) jQuery eingebunden sein (was bei uns bei allen Seiten der Fall ist).

Einen kleinen Schönheitsfehler hat die Sache jedoch: Um Zugriff auf die SQL-Queries zu haben, muss bei der Installation der Developer Utils die Klasse rex_sql gepatched werden. Wer dort keine Veränderungen vorgenommen hat, muss sich keine Gedanken machen. Andernfalls sollte man dringends davon absehen, die Developer Utils zu installieren, da sonst die eigenen Änderungen verlorengehen.

(1) Hat jemand die Per-Anhalter-durch-die-Galaxis-Referenz erkannt? Irgendjemand?

Druckansicht