Skip to main content

Überblick

Wenn Sie ein neues Laravel-Projekt anlegen, sind Fehler- und Ausnahmebehandlung bereits vorkonfiguriert. Anpassungen nehmen Sie über die Methode withExceptions in bootstrap/app.php vor.

Ablauf der Ausnahmebehandlung

Vom Auslösen einer Ausnahme bis zur Antwort an den Client durchläuft Laravel folgende Schritte:
Das an die withExceptions-Closure übergebene Objekt $exceptions ist eine Instanz von Illuminate\Foundation\Configuration\Exceptions und verwaltet die gesamte Ausnahmebehandlung Ihrer Anwendung.

Debug-Einstellungen

Die Option debug in config/app.php steuert, wie viele Fehlerinformationen ausgegeben werden. Standardmäßig übernimmt sie den Wert der Umgebungsvariable APP_DEBUG aus der .env-Datei.
Setzen Sie APP_DEBUG in der Produktion unbedingt auf false. Andernfalls können sensible Informationen an Endnutzer gelangen.

Ausnahmen melden

Beim Reporting wird eine Ausnahme protokolliert oder an externe Dienste wie Sentry oder Flare gesendet. Standardmäßig wird gemäß den Einstellungen in config/logging.php in ein Log geschrieben.

Eigene Report-Callbacks

Möchten Sie je nach Ausnahmetyp unterschiedliche Report-Logik ausführen, übergeben Sie eine Closure an die Methode report. Laravel erkennt den Ausnahmetyp anhand der Type-Hints der Closure.
Auch wenn Sie eine eigene Callback registrieren, wird das Standard-Logging weiter ausgeführt. Um die Standard-Propagation abzubrechen, rufen Sie stop() auf oder geben Sie false zurück.

Helper report()

Wenn Sie eine Ausnahme ausschließlich melden möchten, ohne eine Fehlerseite anzuzeigen, verwenden Sie den Helper report().
Mit dem Helper report() protokollieren Sie Fehler, ohne die Nutzerantwort zu unterbrechen. Ideal für nebensächliche Ausnahmen in Hintergrund-Jobs.

Doppelte Reports verhindern

Wird dieselbe Ausnahme-Instanz mehrfach an report() übergeben, entstehen doppelte Log-Einträge. Mit dontReportDuplicates() protokolliert Laravel dieselbe Instanz nur beim ersten Mal.

Globaler Log-Kontext

Um allen Log-Einträgen zu Ausnahmen dieselben Informationen anzuhängen, verwenden Sie context. Die aktuell angemeldete Benutzer-ID wird, sofern verfügbar, automatisch mitgegeben.

context()-Methode in der Ausnahmeklasse

Definieren Sie in einer eigenen Ausnahmeklasse die Methode context(), um spezifische Kontextinformationen an das Log zu übergeben.

Log-Level anpassen

Um eine bestimmte Ausnahme mit einem bestimmten Log-Level zu erfassen, verwenden Sie die Methode level.

Reports drosseln

Wenn massenhaft Ausnahmen auftreten, können Sie die Reports mit throttle steuern.
Für eine Begrenzung pro Minute verwenden Sie Limit.

Ausnahmen rendern

Beim Rendering wird eine Ausnahme in eine HTTP-Antwort umgewandelt. Standardmäßig erzeugt Laravel eine passende Antwort automatisch; Anpassungen sind aber möglich.

Eigene Render-Callbacks

Übergeben Sie an die Methode render eine Closure, um die Ausnahme in eine Antwort umzuwandeln.
Auch das Rendering integrierter Ausnahmen (etwa NotFoundHttpException) lässt sich überschreiben. Liefert die Closure keinen Wert, wird das Standardrendering verwendet.

Automatische Erkennung von JSON/HTML

Laravel entscheidet anhand des Accept-Headers, ob HTML oder JSON zurückgegeben wird. Um diese Logik anzupassen, nutzen Sie shouldRenderJsonWhen.

Antwort insgesamt anpassen

Mit respond können Sie die erzeugte Antwort weiter verändern.

Eigene Ausnahmeklassen

Sie können in app/Exceptions/ eigene Ausnahmeklassen anlegen. Definieren Sie in der Klasse Methoden report() und render(), werden sie automatisch aufgerufen – auch ohne Konfiguration in bootstrap/app.php.

Ausnahmeklasse erzeugen

1

Ausnahmeklasse erstellen

2

report() und render() implementieren

Die report()-Methode unterstützt Dependency Injection per Type-Hint. Der Service Container von Laravel löst die Abhängigkeiten automatisch auf.

Interface ShouldntReport

Für Ausnahmen, die nicht gemeldet werden sollen, implementieren Sie das Interface ShouldntReport. Solche Ausnahmen werden nie gemeldet.

Ausnahmen auslösen

Helper abort()

Sie können von überall in der Anwendung eine HTTP-Fehlerantwort auslösen.

abort_if() / abort_unless()

Helfer, um Ausnahmen bedingt auszulösen.
Praktisch bei Berechtigungsprüfungen in Controllern oder Middleware, häufig in Kombination mit Gates und Policies.

Globale Steuerung von Ausnahmen

Ausnahmen gezielt ignorieren

Über dontReport bestimmen Sie Ausnahmen, die nicht gemeldet werden sollen. Individuelles Rendering bleibt weiter aktiv.
Für bedingtes Ignorieren übergeben Sie eine Closure an dontReportWhen.
Standardmäßig ignoriert Laravel bereits einige Ausnahmen wie 404-Fehler, CSRF-Token-Verstöße (419) und Origin-Konflikte (403).

Standardmäßig ignorierte Ausnahmen wieder melden

Um Ausnahmen, die Laravel standardmäßig ignoriert, wieder zu melden, verwenden Sie stopIgnoring.

HTTP-Fehlerseiten

Zu jedem HTTP-Statuscode können Sie eigene Fehlerseiten definieren.

Eigene Fehler-Views erstellen

Legen Sie im Verzeichnis resources/views/errors/ Blade-Vorlagen an, deren Dateiname dem Statuscode entspricht.
Innerhalb der View steht die Variable $exception mit den Fehlerdetails zur Verfügung.

Standard-Fehlervorlagen veröffentlichen

Wenn Sie die Standard-Fehlerseiten von Laravel als Ausgangspunkt verwenden möchten, holen Sie sie mit vendor:publish.

Fallback-Fehlerseiten

Als Fallback für Statuscodes ohne eigene View können Sie 4xx.blade.php und 5xx.blade.php anlegen.
Für 404, 500 und 503 liefert Laravel bereits eigene Standardseiten. Wenn Sie diese anpassen möchten, legen Sie statt eines Fallbacks eigene Dateien (404.blade.php usw.) an.

Praxisbeispiel: API-Ausnahmehandler

Bei APIs möchten Sie Ausnahmen immer als JSON zurückgeben. Nachfolgend ein Beispiel, wie Sie API-Fehler zentral in bootstrap/app.php verwalten.

Eigene API-Ausnahmeklasse

Eine gemeinsame Basisklasse für API-Ausnahmen ermöglicht konsistente Fehlerantworten aus jedem Endpunkt.
Verwendung im Controller:

Zusammenfassung

  • Erstellen Sie Dateien wie resources/views/errors/404.blade.php – Laravel nutzt sie automatisch.
  • Über die Variable $exception erhalten Sie die Fehlerdetails.
  • Mit php artisan vendor:publish --tag=laravel-errors holen Sie sich die Standardvorlagen.
  • 4xx.blade.php / 5xx.blade.php dienen als Fallback-Seiten.
  • Setzen Sie APP_DEBUG=false und blenden Sie Stacktraces vor Nutzern aus.
  • Binden Sie externe Error-Tracker wie Sentry oder Flare an und verwalten Sie Fehler zentral.
  • Nutzen Sie throttle(), um Log-Fluten bei massenhaften Ausnahmen zu vermeiden.
  • Halten Sie bei API-Endpunkten ein konsistentes JSON-Fehlerformat ein.
Zuletzt geändert am 13. Juli 2026