Fehler-Monitoring für Symfony.
Mit sentry/sentry-symfony meldet deine Symfony-Anwendung Ausnahmen aus Controllern, Befehlen und dem Messenger an Fehlo. Das Flex-Rezept erledigt den größten Teil.
Stand: 24.10.2026, sentry/sentry-symfony 5.14.0 mit sentry/sentry 4.34, Symfony 5.4 bis 8. Das PHP-SDK haben wir noch nicht selbst gegen Fehlo laufen lassen; es spricht dasselbe Protokoll wie die getesteten SDKs.
1. Paket installieren
composer require sentry/sentry-symfonyDas Flex-Rezept registriert das Bundle in config/bundles.php, nur für die Umgebung prod, und legt config/packages/sentry.yaml an. Das Rezept liegt in recipes-contrib; wendet Flex es nicht an, erlaubst du Contrib-Rezepte mit composer config extra.symfony.allow-contrib true und installierst neu.
2. DSN setzen
###> sentry/sentry-symfony ###
SENTRY_DSN="https://<key>@app.fehlo.de/<project-id>"
###< sentry/sentry-symfony ###In Produktion setzt du SENTRY_DSN besser als echte Umgebungsvariable. Die Konfiguration aus dem Rezept, mit ausdrücklich abgeschalteten personenbezogenen Daten:
when@prod:
sentry:
dsn: '%env(SENTRY_DSN)%'
options:
send_default_pii: false
ignore_exceptions:
- 'Symfony\Component\ErrorHandler\Error\FatalError'
- 'Symfony\Component\Debug\Exception\FatalErrorException'Die Umgebung kommt aus %kernel.environment%, das Release aus der Umgebungsvariablen SENTRY_RELEASE.
3. Testen
Das Bundle hat einen Testbefehl. Weil es nur in prod registriert ist, rufst du ihn dort auf:
APP_ENV=prod php bin/console sentry:testEr antwortet mit „Message sent successfully with ID …“, und die Nachricht erscheint in Fehlo. Für einen echten Stacktrace legst du eine Route an, die eine Ausnahme wirft:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Attribute\Route;
class FehloTestController extends AbstractController
{
#[Route('/_fehlo-test', name: 'fehlo_test')]
public function test(): never
{
throw new \RuntimeException('Fehlo test error');
}
}Leer nach Änderungen an der YAML-Datei den Cache: APP_ENV=prod php bin/console cache:clear.
Monolog
Willst du Log-Einträge ab ERROR als Fehler sehen, auch wenn keine Ausnahme fliegt, häng den Monolog-Handler des SDK ein. Schalte dann den Error-Listener des Bundles ab, sonst kommen Ausnahmen doppelt an:
when@prod:
sentry:
register_error_listener: false
register_error_handler: false
monolog:
handlers:
sentry:
type: service
id: Sentry\Monolog\Handler
services:
Sentry\Monolog\Handler:
arguments:
$hub: '@Sentry\State\HubInterface'
$level: !php/const Monolog\Logger::ERROR
$fillExtraContext: trueDatenschutz
send_default_pii ist standardmäßig false: keine Header, Cookies, IP-Adressen und kein angemeldeter Nutzer. Adresse und Query-String der Anfrage gehen immer mit. Seit sentry/sentry 4.33 gibt es zusätzlich data_collection. Setz data_collection nicht: Sobald es gesetzt ist, gelten dessen freizügigere Standards, und das SDK sendet IP-Adressen, Cookies und Bodies mit. Fehlo entfernt die Absender-IP auf dem Server und filtert E-Mail-Adressen, Passwörter und Tokens.
Häufige Fragen
Warum kommen im Entwicklungsmodus keine Fehler an?
Das Flex-Rezept registriert das Bundle nur für prod. Zum Testen lokal rufst du den Testbefehl mit APP_ENV=prod auf oder trägst das Bundle in config/bundles.php für alle Umgebungen ein.
Funktioniert das mit Shopware?
Ja, Shopware ist eine Symfony-Anwendung. Für Shopware nimmst du zusätzlich das Bundle der Friends of Shopware, siehe Shopware einrichten.
Es kommt nichts an. Was prüfe ich?
Erstens den DSN: Er muss auf app.fehlo.de zeigen. Zweitens, ob dein Server oder Browser https://app.fehlo.de erreicht (Firewall, Proxy, Werbeblocker). Drittens, ob dein Kontingent für den Monat aufgebraucht ist; dann bekommst du eine Mail. Viertens, ob sampleRate oder beforeSend Ereignisse verwirft. Fehlen nur Performance-Daten, sind vielleicht die Transaktionen des Monats aufgebraucht.