Neues AddOn: Error Handler

Alles über die Anwendung und Entwicklung von AddOns.

Neues AddOn: Error Handler

Beitragvon xrstf » 3. Nov 2009, 12:19

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:

  • Der Kunde muss uns nicht mehr Screenshots schicken, nur um festzustellen, dass der für uns interessante Teil fehlt. Er muss sich auch die Fehlermeldung nicht mehr merken oder sie extra in eine eMail an uns kopieren. Im Regelfall wissen wir bereits vor dem Kunden, dass es irgendwo geknallt hat.
  • Der Entwickler muss nicht mehr raten, wie der Fehler zustande kam. Er hat direkt einen Stacktrace und den globalen Systemzustand zur Hand und muss nicht traurig sein, dass der Kunde diese wertvollen Daten nicht (nach)liefern kann. Auch muss er den Kunden weniger oft bitten, zu beschreiben, was er getan hat, um den Fehler zu produzieren.
  • Zu guter Letzt freut sich auch der Vertrieb, wenn weniger Mails reinkommen, die als Bugs im internen Ticket-System eingetragen werden müssen. Immerhin gehen die eMails direkt an den oder die Entwickler. Und weil Fehler, die nicht korrigiert werden, den Entwickler auf Dauer nerven, werden sie auch schneller behoben -- einfach nur, um Ruhe zu haben.
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.

Funktionen

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

  • In der Produktiv-Umgebung werden Fehler keinesfalls angezeigt. Sie werden stattdessen auf dem Server protokolliert und -- auf Wunsch -- per eMail verschickt. Diese Umgebung wählen wir also, wenn der Code auf dem Server läuft und die Website bereits live ist.
  • In der Entwicklungs-Umgebung werden Fehler ebenfalls nicht mehr dort angezeigt, wo sie auftreten. Stattdessen werden sie gesammelt und inklusive Stacktrace und Code-Ausschnitt in einem HTML-Overlay angezeigt. Gleichzeitig werden auch SQL-Queries geloggt und in einem Overlay angezeigt (inklusive abgerufener Datensätze und dafür benötigter Zeit).

Im REDAXO-Backend kann man einfach zwischen diesen Umgebungen wählen und diese auch gleich konfigurieren.

Error-Level-Auswahl

Bild

Einstellungen im Production-Environment

Bild

Aufgetretene Fehler

Bild

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).

Download des AddOns Error Handler v1.1.4
(ca. 360 KB, für REDAXO 4.1 bis 4.2.x)

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.

Quellcode

Neben dem eigentlichen Download für alle, die das AddOn einfach nur konsumieren möchten, sei an dieser Stelle auch noch auf das öffentliche Repository bei Bitbucket verwiesen. Wir freuen uns über Mithilfe und Feedback jeder Art. Sei es in Form von Patches oder via Forks. Einzige Voraussetzung ist ein installierter Mercurial-Client (für Windows: Mercurial Command Line, TortoiseHg, MercurialEclipse, Merclipse, ...). Feedback und Patches dann bitte direkt an mich (christoph@webvariants.de). Ich freu mich drauf :)

Grüße,
Christoph

Hinweis: Bei diesem Beitrag handelt es sich um eine schamlose Kopie des dazugehörigen Blogbeitrags.
User was banned for this post. Bild
Benutzeravatar
xrstf
 
Beiträge: 61
Registriert: 3. Sep 2009, 14:49

Beitragvon michaelKeller » 3. Nov 2009, 16:34

Hi Christoph!

Klingt seeehr interessant! Bei nächster Gelegenheit werden wir das neue Addon mal testen.
Ich denke das könnte viele Probleme schon im Vorfeld aufdecken!

Super, danke für dieses Addon!

Grüße Michael
Webdesign aus Rosenheim www.webdesigns-rosenheim.de
Benutzeravatar
michaelKeller
 
Beiträge: 58
Registriert: 28. Jul 2009, 07:49
Wohnort: Rosenheim

Beitragvon mina30de » 8. Mär 2010, 16:13

Hallo,

Erst einmal vielen Dank für das Addon. Es ist sicher eine sehr große Hilfe, wenn man alle Fehlermedungen versteht. :oops:

Ich habe das Addon gerade eben installiert.

Meine Frage:
Ich arbeite mit einem Produktivsystem und ich möchte gern vorübergehend SQL-Anfragen loggen.
Siehe Abbildung, kann ich hier auswählen, ob ich die Datei auf dem Server oder im Speicher bei Seitenaufruf loggen möchte.

Bild

Ich habe Server gewählt, aber ich finde die Logdatei nicht. Wo wird die denn abgelegt?
Weiß das jemand?

Besten Dank Gruß Mina
mina30de
 
Beiträge: 152
Registriert: 19. Mär 2007, 10:43

Beitragvon xrstf » 8. Mär 2010, 17:27

Die Logs sollten in files/tmp_/mysqllogs/ liegen.

Grüße,
Christoph
User was banned for this post. Bild
Benutzeravatar
xrstf
 
Beiträge: 61
Registriert: 3. Sep 2009, 14:49

Beitragvon mina30de » 8. Mär 2010, 21:42

Hallo Christoph,

Ja, ich habe in /files/tmp_ folgende Files entdeckt:

eh.environment
eh.level
eh.querylogging
eh.settings

Alle sind ca. 1KB groß.
Da immer wieder mal Probleme bei der Rechtevergabe vorkommen, frage ich mich, ob diese Dateien (Schreib) Rechte brauchen? Denn bis jetzt sind alle bis auf Settings leer.

Gruß Mina
mina30de
 
Beiträge: 152
Registriert: 19. Mär 2007, 10:43

Beitragvon mina30de » 8. Mär 2010, 23:40

Hallo Christoph,

vielleicht kannst Du mir etwas auf die Sprünge helfen.

Folgendes Problem:

Ich kopiere einen Artikel Clang 0 nach Clang 1 und Clang 2.
Jedes Mal bekomme ich eine Erfolgsmeldung.
Tatsächlich aber ist kein Artikel vorhanden / kopiert (?).

Nun bekomme ich DANK Error_handler folgende Warnung

Code: Alles auswählen
Strack Trace
===================

[Warning] unlink(/srv/www/htdocs/web192/html/redaxo/include/generated/articles/526.1.content): Datei oder Verzeichnis nicht gefunden    [/redaxo/include/functions/function_rex_generate.inc.php:108]
  at rex_deleteCacheArticleContent(526, 1)   [...axo/include/functions/function_rex_content.inc.php:474]
  at rex_copyContent(526, 526, 0, 1, '18161', 0)   [...axo/include/functions/function_rex_content.inc.php:470]
  at rex_copyContent(526, 526, 0, 1, '18160', 0)   [...axo/include/functions/function_rex_content.inc.php:470]
  at rex_copyContent(526, 526, 0, 1, '18159', 0)   [...axo/include/functions/function_rex_content.inc.php:470]
  at rex_copyContent(526, 526, 0, 1, '18158', 0)   [...axo/include/functions/function_rex_content.inc.php:470]
  at rex_copyContent(526, 526, 0, 1, '18157', 0)   [...axo/include/functions/function_rex_content.inc.php:470]
  at rex_copyContent(526, 526, 0, 1, '18156', 0)   [...axo/include/functions/function_rex_content.inc.php:470]
  at rex_copyContent(526, 526, 0, 1, '18155', 0)   [...axo/include/functions/function_rex_content.inc.php:470]
  at rex_copyContent(526, 526, 0, 1)   [/redaxo/include/pages/content.inc.php:390]
  at require('/srv/www/htdocs/web192/html/redaxo/include/pages/content.inc.php')   [/redaxo/index.php:246]



Vielleicht sollte ich noch anmerken, dass ich vor kurzem von R4.1 auf R4.2.1 umgezogen bin.
Beim Umzug ging die komplette default Sprache und einige Artikel der beiden anderen Sprachen irgendwie verloren.
Das heißt, in der Datenbank sind sämtliche Daten vorhanden, nur sie werden eben nicht angezeigt /ausgegeben.
Mit Hilfe einer 3 Sprache (gleich die der default), konnte ich die Artikel nach Clang 0 kopieren und den fehlenden Inhalt in der gleichen Artikel_ID sozusagen ersetzen.
Und Artikel die Tabellen. Bilder etc. enthalten, möchte ich dann eben auch in die anderen Sprachen kopieren.
Nur leider geht das nicht.

Sagt Dir diese Fehlermeldung vielleicht warum?

Gruß Mina
mina30de
 
Beiträge: 152
Registriert: 19. Mär 2007, 10:43

Beitragvon xrstf » 9. Mär 2010, 12:29

Der Fehler, den der Error Handler dort bemängelt ist gar kein Fehler. In der damals veröffentlichten Version hat der EH einfach das @ (also den expliziten Wunsch, für eine Anweisung das Error Handling zu deaktivieren) ignoriert. Die Warnung, dass die Datei nicht vorhanden ist, kannst du also getrost ignorieren.

Zur Diagnose deines Problems würde ich erst einmal den EH deaktivieren und schauen, ob dann alles normal läuft. Außerdem solltest du den aktuellen Snapshot verwenden, den du dir hier runterladen kannst:

http://bitbucket.org/webvariants/error- ... et/tip.zip

Damit sollten die @-Befehle korrekt verarbeitet werden und du wesentlich weniger false negatives erhalten.
User was banned for this post. Bild
Benutzeravatar
xrstf
 
Beiträge: 61
Registriert: 3. Sep 2009, 14:49

Beitragvon mina30de » 11. Mär 2010, 17:30

Hallo Christoph,

ich habe Probleme die neuste Version zu installieren:

Ich bekomme immer folgende Meldung (hab auch sogar mal alle Dateien & Ordner mit 777 Rechte versehen)
AddOn "error-handler" konnte aus folgendem Grund nicht installiert werden:
Es wurde kein Grund angegeben.


:(

Gruß Mina
mina30de
 
Beiträge: 152
Registriert: 19. Mär 2007, 10:43

Beitragvon xrstf » 11. Mär 2010, 18:26

Bitte benenn das Verzeichnis noch in error_handler (mit Unterstrich) um. Repository-Name und AddOn-Verzeichnis sind bei uns nicht zwangsweise identisch.

Grüße,
Christoph
User was banned for this post. Bild
Benutzeravatar
xrstf
 
Beiträge: 61
Registriert: 3. Sep 2009, 14:49

Beitragvon mina30de » 11. Mär 2010, 20:08

Ja Danke!

Jetzt gehts. :D
mina30de
 
Beiträge: 152
Registriert: 19. Mär 2007, 10:43

Beitragvon nuxx » 26. Aug 2010, 14:27

Hallo
ich habe eben die aktuelle version installiert 1.3.0

Ich bekomme lediglich eine weiße Seite mit "Es ist ein interner Fehler aufgetreten.
Bitte versuchen Sie es später noch einmal." angezeigt

Hab es auf 2 unterschiedlichen Servern versucht, jeweils mit R4.3.1

Viele Grüße Nuxx
nuxx
 
Beiträge: 85
Registriert: 16. Dez 2005, 17:45

Beitragvon xrstf » 26. Aug 2010, 14:32

Hi,

welche PHP-Version setzt du bei dir ein? Tritt der Fehler nur im Frontend oder auch im Backend auf? Wenn du das Backend noch nutzen kannst, versuch bitte, im Backend des Error Handlers den Entwicklermodus einzuschalten, dann sollte statt der generischen Meldung ein Stacktrace erzeugt werden.

Grüße,
Christoph
User was banned for this post. Bild
Benutzeravatar
xrstf
 
Beiträge: 61
Registriert: 3. Sep 2009, 14:49

Beitragvon nuxx » 26. Aug 2010, 16:10

Hallo Christoph und danke für die schnelle Antwort.

PHP: 5.2.4-2ubuntu5.10
Datenbank

MySQL: 5.0.51

Das Frontend und Backend funktioniert, nur wenn ich auf Error Handler klicke kommt die Meldung.
Viele Grüße Nuxx
nuxx
 
Beiträge: 85
Registriert: 16. Dez 2005, 17:45

Beitragvon xrstf » 26. Aug 2010, 20:27

Hi,

ich hab eben nochmal geschaut: Du hast Recht, dem Error Handler fehlt eine Funktion, die wir in Sally eingebaut haben (t()). Daher brennt das Backend dann in REDAXO.
Ich schau mir das die Tage mal an und geb dann Bescheid, wenn ich die t()-Aufrufe überall entsprechend angepasst habe.

Danke für deinen Bugreport, das hilft mir, die Qualität hoch zu halten :-)

Grüße,
Christoph
User was banned for this post. Bild
Benutzeravatar
xrstf
 
Beiträge: 61
Registriert: 3. Sep 2009, 14:49

Beitragvon xrstf » 27. Aug 2010, 04:43

Hi,

ich habe die Abhängigkeit zu t() entfernt und daraufhin die neue Version 1.3.1 herausgebracht, die @ http://www.webvariants.de/labs/downloads/ runtergeladen werden kann. Meine Tests im REDAXO 4.3.1-Backend waren erfolgreich. :D

Grüße,
Christoph
User was banned for this post. Bild
Benutzeravatar
xrstf
 
Beiträge: 61
Registriert: 3. Sep 2009, 14:49

Nächste

Zurück zu AddOns [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast