1. Einführung
Laravel hat standardmäßig die Fehler- und Ausnahmebehandlung für uns konfiguriert. Wir lösen Ausnahmen in der AppExceptionsHandler-Klasse aus und geben die Antwort an den Benutzer zurück. In diesem Tutorial werden wir uns eingehend mit dieser Klasse befassen.
Darüber hinaus integriert Laravel auch die Monolog-Protokollbibliothek, um eine Vielzahl leistungsstarker Protokollprozessoren bereitzustellen. Standardmäßig hat Laravel einige Prozessoren für uns konfiguriert. Wir können eine einzelne Protokolldatei auswählen oder Fehlermeldungen im System protokollieren Protokoll.
2. Konfiguration
Anzeige der Fehlerdetails
Das Debug-Konfigurationselement in der Konfigurationsdatei config/app.php steuert die Anzahl der vom Browser angezeigten Fehlerdetails . Standardmäßig wird dieses Konfigurationselement über die Umgebungsvariable APP_DEBUG in der .env-Datei festgelegt.
Für die lokale Entwicklung sollten Sie die Umgebungsvariable APP_DEBUG auf true setzen. In einer Produktionsumgebung sollte dieser Wert auf „false“ gesetzt werden. Wenn es in einer Produktionsumgebung auf „true“ gesetzt ist, ist es möglich, dass einige sensible Konfigurationswerte für Endbenutzer verfügbar gemacht werden.
Protokollspeicherung
Standardmäßig unterstützt Laravel die Protokollmethoden Single, Daily, Syslog und Errorlog. Wenn Sie möchten, dass Protokolldateien täglich generiert werden, anstatt eine einzelne Datei zu generieren, sollten Sie den Protokollwert in der Konfigurationsdatei config/app.php wie folgt festlegen:
'log' => 'daily '
Maximaler Lebenszyklus von Protokolldateien
Bei Verwendung des täglichen Protokollmodus speichert Laravel standardmäßig bis zu den letzten 5 Tagen an Protokollen für uns. Wenn Sie dies ändern möchten Gleichzeitig müssen Sie eine Konfiguration log_max_files zu den App-Konfigurationsdateien hinzufügen:
'log_max_files' => 30
Fehlerstufe protokollieren
Bei Verwendung von Monolog protokollieren Nachrichten können unterschiedliche Fehlerstufen haben. Standardmäßig schreibt Laravel alle Protokolle in das Speicherverzeichnis. In einer Produktionsumgebung möchten Sie jedoch möglicherweise die Mindestfehlerstufe konfigurieren. Dies kann durch Hinzufügen des Konfigurationselements log_level in der Konfigurationsdatei-App erreicht werden .php.
Nachdem dieses Konfigurationselement konfiguriert wurde, zeichnet Laravel alle Protokolle mit Fehlerstufen auf, die größer oder gleich dieser angegebenen Stufe sind. Wenn die Standard-Protokollstufe beispielsweise „Fehler“ ist, dann „Fehler“, „Kritisch“, „Warnung“ und „Notfall“. Protokollinformationen werden aufgezeichnet:
'log_level' => env('APP_LOG_LEVEL', 'error'),
Hinweis: Monolog unterstützt die folgenden Fehlerstufen – Debug, Info, Hinweis, Warnung, Fehler, kritisch, Warnung, Notfall.
Benutzerdefinierte Monolog-Konfiguration
Wenn Sie die Monolog-Konfiguration in Ihrer Anwendung vollständig steuern möchten, können Sie die Methode configureMonologUsing verwenden. Sie müssen diese Methode aufrufen, bevor die Datei bootstrap/app.php die Variable $app zurückgibt:
$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...); }); return $app;
3. Ausnahmehandler
Alle Ausnahmen werden von der Klasse AppExceptionsHandler behandelt, die zwei Methoden enthält: Report und Render. Im Folgenden gehen wir näher auf diese beiden Methoden ein.
Berichtsmethode
Die Berichtsmethode wird verwendet, um Ausnahmen zu protokollieren und an externe Dienste wie Bugsnag oder Sentry zu senden. Standardmäßig übergibt die Berichtsmethode die Ausnahme nur an die Basisklasse, in der die Ausnahmen werden protokolliert. Natürlich können Sie Ausnahmen auch aufzeichnen und entsprechend Ihren Anforderungen behandeln.
Wenn Sie beispielsweise verschiedene Arten von Ausnahmen unterschiedlich melden müssen, können Sie den Instanzvergleichsoperator von PHP verwenden:
/** * 报告或记录异常 * * This is a great spot to send exceptions to Sentry, Bugsnag, etc. * * @param \Exception $e * @return void */ public function report(Exception $e){ if ($e instanceof CustomException) { // } return parent::report($e); }
Ignorieren Ausnahmen nach Typ
Das Attribut $dontReport des Ausnahmehandlers enthält ein Array von Ausnahmetypen, die nicht protokolliert werden. Standardmäßig werden 404-Fehlerausnahmen nicht in die Protokolldatei geschrieben. Sie können bei Bedarf weitere Ausnahmen hinzufügen . Ausnahmetyp für dieses Array:
/** * A list of the exception types that should not be reported. * * @var array */ protected $dontReport = [ \Illuminate\Auth\AuthenticationException::class, \Illuminate\Auth\Access\AuthorizationException::class, \Symfony\Component\HttpKernel\Exception\HttpException::class, \Illuminate\Database\Eloquent\ModelNotFoundException::class, \Illuminate\Validation\ValidationException::class, ];
render method
render method ist für die Konvertierung der angegebenen Ausnahme in HTTP verantwortlich, die an gesendet wird Browser-Antwort, standardmäßig werden Ausnahmen an die Basisklasse übergeben, die die Antwort für Sie generiert. Natürlich können Sie auch den Ausnahmetyp überprüfen oder eine benutzerdefinierte Antwort entsprechend Ihren Anforderungen zurückgeben:
/** * 将异常渲染到HTTP响应中 * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response */ public function render($request, Exception $e){ if ($e instanceof CustomException) { return response()->view('errors.custom', [], 500); } return parent::render($request, $e); }
4 HTTP-Ausnahme
Einige Ausnahmen beschreiben HTTP-Fehlercodes vom Server. Dies kann beispielsweise ein „Seite nicht gefunden“-Fehler (404), ein „Authentifizierungsfehler“ (401) oder ein 500-Fehler sein, der durch einen Programmfehler verursacht wird. Um in der Anwendung eine solche Antwort zu generieren, können Sie die Abort-Methode verwenden:
abort(404);
Die Abort-Methode löst sofort eine Ausnahme aus wird vom Ausnahmehandler gerendert. Darüber hinaus können Sie eine Antwortbeschreibung wie diese bereitstellen:
abort(403, 'Unauthorized action.');
Diese Methode kann sein wird zu jedem Zeitpunkt im Anforderungslebenszyklus verwendet.
Benutzerdefinierte HTTP-Fehlerseite
In Laravel ist es einfach, Fehlerseiten mit unterschiedlichen HTTP-Statuscodes zurückzugeben. Wenn Sie beispielsweise eine 404-Fehlerseite anpassen möchten, erstellen Sie eine Ressource/Ansicht /errors/404.blade.php-Datei, diese Ansichtsdatei wird zum Rendern aller vom Programm zurückgegebenen 404-Fehler verwendet. Es ist zu beachten, dass die Benennung der Ansicht in diesem Verzeichnis mit dem entsprechenden HTTP-Statuscode übereinstimmen sollte.
5. Protokoll
Laravel bietet eine einfache Protokollabstraktionsschicht basierend auf der leistungsstarken Monolog-Bibliothek. Standardmäßig ist Laravel so konfiguriert, dass es tägliche Protokolle für die Anwendung im Speicher/in den Protokollen generiert Protokolldatei können Sie die Protokollfassade verwenden, um Protokollinformationen im Protokoll aufzuzeichnen:
<?php namespace App\Http\Controllers; use Log; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller{ /** * 显示指定用户的属性 * * @param int $id * @return Response */ public function showProfile($id) { Log::info('Showing user profile for user: '.$id); return view('user.profile', ['user' => User::findOrFail($id)]); } }
Der Logger bietet acht in RFC 5424 definierte Protokollebenen: Notfall, Warnung, kritisch, Fehler, Warnung, Hinweis, Info und Debug.
Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error) ;
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);
Kontextinformationen
Kontextdaten werden ebenfalls in Form eines Arrays an die Protokollmethode übergeben und dann formatiert und zusammen mit der Protokollmeldung angezeigt:
Log::info( 'Benutzer konnte sich nicht anmelden.', ['id' => $user->id]);
Zugriff auf die zugrunde liegende Monolog-Instanz
Monolog verfügt über mehrere verfügbare Protokollprozessoren. Bei Bedarf können Sie auf die zugrunde liegende Monolog-Instanz zugreifen, die von Laravel verwendet wird:
$monolog = Log::getMonolog();
Mehr Laravel 5.3 Study Notes Fehler & Protokolle Für verwandte Artikel beachten Sie bitte die chinesische PHP-Website!