Du hast deinen AdBlocker an?

Es wäre ein Traum, wenn du ihn für t3n.de deaktivierst. Wir zeigen dir gerne, wie das geht. Und natürlich erklären wir dir auch, warum uns das so wichtig ist. Digitales High-five, deine t3n-Redaktion

t3n 31

Sentry: Programmierfehler finden mit System

Seite 2 / 2

Sentry ins eigene Projekt integrieren: so geht's

Um Sentry auszuprobieren, reicht die kostenfreie SaaS-Variante. Nach dem Anlegen eines neuen Projekts muss zunächst der Raven-PHP-Client von Github geladen werden, alternativ steht auch ein Composer-Package zur Verfügung. Mit dem Sentry-DSN wird eine Instanz von Raven erstellt:

<?php

# Bei der Installation via Composer entfällt dieser Teil
require_once '/path/to/raven/lib/Raven/Autoloader.php';
Raven_Autoloader::register();

# Der von Sentry vergebene DSNdefine('DSN', 'https://public:secret@app.getsentry.com/project-id');

# Initialisierung des Clients
$client = new Raven_Client(DSN, array(
 'logger' => 't3n',
 'tags' => array(
 'foo'=>'bar',    
 ),
));

Bei der Initialisierung des Clients können beliebige Tags sowie ein Name für den Logger angegeben werden. Sentry erstellt daraus automatisch Filter für das Web-Frontend. Um die eigentliche Nachricht zu erzeugen, genügt ein Einzeiler:

# Event loggen, die Daten aus dem Extra-Parameter werden direkt dem Event angehängt
$event_id = $client->captureMessage("Fehler: %s", array('Unbekannt'), array(
 'extra' => array(
 'key' => 'value',
 'lorem' => 'ipsum'
 ),
 'level' => 'info',
 ));

echo $event_id;

Neben der eigentlichen Nachricht werden von Raven weitere Details wie die HTTP-Header des Requests, GET- und POST-Parameter, das $_SERVER-Array sowie Informationen zum Client-OS und Browser gesendet. Optional besteht die Möglichkeit, verschiedene Fehler-Level wie Debug, Warning oder Fatal für jedes Event zu vergeben. Ebenfalls optional ist der Extra-Parameter, der in der neuesten Version des Clients hinzugekommen ist. Mit diesem lassen sich beliebige Key-/Value-Paare (Values können auch Arrays oder Objekte sein) als Zusatzinformation übergeben, die später übersichtlich formatiert im Kontext des Events angezeigt werden. Einen Hash, der all diese Informationen exakt in der Datenbank identifiziert, liefert Raven praktischerweise als Rückgabewert.

Beispiel der Detail-Ansicht einer Nachricht. Neben der Meldung selbst sind auch Unmengen an kontextbezogenen Informationen verfügbar.
Beispiel der Detail-Ansicht einer Nachricht. Neben der Meldung selbst sind auch Unmengen an kontextbezogenen Informationen verfügbar.
Darüber hinaus kennt Raven noch weitere „Convenience Methoden“. Der wichtigste Anwendungsfall ist das Loggen von Exceptions. Analog zu oben genanntem Beispiel kann mit Raven_Client::captureException($e) anstelle einer Nachricht auch ein Exception-Objekt übergeben werden. Intern nutzt Raven dazu ein anderes Nachrichten-Interface, das im Wesentlichen für die ordentliche Darstellung eines Stacktraces in den Logs sorgt. Auch die Verwendung im Rahmen des Standard-Error-Handlings von PHP ist bereits vorgesehen, der Client stellt entsprechende Methoden bereit.

Das Web-Frontend: Fehlermeldung in Echtzeit

Im Web-Frontend von Sentry laufen alle Nachrichten eines Projekts in Echtzeit zusammen und werden im so genannten „Stream“ dargestellt. Sendet eine Applikation mehrfach dasselbe Event, wird es aggregiert und an den Anfang verschoben. In Kombination mit der Häufigkeit und dem Fehlerlevel ergibt sich so eine Priorisierung für das anschließende Bug-Fixing praktisch von selbst. Neben den (konfigurierbaren) Default-Filtern von Sentry wie nach Host oder Client-Browser lässt sich der Stream auch nach den bei der Client-Instanzierung vergebenen Tags filtern. Sentry informiert außerdem bei einem erstmalig aufgetretenen Bug per Mail oder IM und kann automatisiert ein Ticket in Tools wie Jira eröffnen oder Web-Hooks ausführen.

In der Detail-Ansicht steht dann die volle Bandbreite an Kontext-Informationen zur Verfügung, zum Beispiel die Informationen aus dem extra-Parameter von Raven_Client::captureMessage() oder der Stacktrace einer Exception. Wurde der Auslöser einer Exception korrigiert, lässt sich der daraus resultierende Eintrag entsprechend markieren. Tritt dieselbe Exception erneut auf, wertet Sentry das als Regression-Bug und sendet eine entsprechende Benachrichtigung – so ist es fast unmöglich, aufgetretene Fehler zu übersehen.

Sentry informiert bei aufgetretenen Fehlern einen festgelegten Empfängerkreis per E-Mail oder IM.
Sentry informiert bei aufgetretenen Fehlern einen festgelegten Empfängerkreis per E-Mail oder IM.

Fazit: Zentrales Logging wichtig bei größeren Projekten

In der Praxis merkt man schnell, dass dank Sentry Probleme auffallen, von denen man nicht mal wusste, dass es diese überhaupt gibt. Bekommt zum Beispiel ein Redakteur beim Einpflegen eines Artikels eine Fehlermeldung, erhalten die Entwickler alle wesentlichen Informationen dazu – und zwar noch bevor der Redakteur selbst reagieren kann. Auf den ersten Blick „nur“ ein praktisches Tool für das zentralisierte Logging, können Tools wie Sentry mehr als eine wichtige Komponente bei fast allen größeren Projekten darstellen. Logging kann so nützlich sein, wenn man es richtig macht: mit Sentry.

Daniel Haller
Daniel Haller

studierte in Darmstadt Media System Design und arbeitete seitdem bei verschiedenen Digital-Agenturen. Derzeit ist er als Senior Entwickler bei Scholz & Volkmer in Wiesbaden tätig und betreut einen Kunden aus der Automobilbranche.

Startseite
  • Seite:
  • 1
  • 2

Bitte beachte unsere Community-Richtlinien

Eine Reaktion

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden