The Exception Handler
The Report Method
Alle Ausnahmen werden von der Klasse App\Exceptions\Handler behandelt. Diese Klasse enthält zwei Methoden: report und render. Wir werden jede dieser Methoden im Detail untersuchen. Die Reportmethode wird verwendet, um Exceptions zu protokollieren oder an einen externen Service wie Bugsnag oder Sentry zu senden. Standardmäßig übergibt die report-Methode die Ausnahme an die Basisklasse, in der die Ausnahme protokolliert wird. Es steht Ihnen jedoch frei, Ausnahmen zu protokollieren, wie Sie es wünschen.
Wenn Sie beispielsweise verschiedene Arten von Ausnahmen auf unterschiedliche Weise melden müssen, können Sie den PHP instanceof des Vergleichsoperators verwenden:
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
if ($exception instanceof CustomException) {
//
}
parent::
report($exception);
}
Anstatt viele Prüfungen (instanceof checks) in Ihrer report-Methode durchzuführen, sollten Sie die Verwendung von meldepflichtigen Ausnahmen (reportable exceptions) in Betracht ziehen.
Global Log Context
Wenn verfügbar, fügt Laravel die ID des aktuellen Benutzers automatisch als Kontextdaten in die Logmeldung jeder Ausnahme ein. Sie können Ihre eigenen globalen Kontextdaten definieren, indem Sie die context-Methode der Klasse App\Exceptions\Handler Ihrer Anwendung überschreiben. Diese Informationen werden in die Logmeldung jeder Ausnahme aufgenommen, die von Ihrer Anwendung geschrieben wurde:
/**
* Get the default context variables for logging.
*
* @return array
*/
protected function context()
{
return array_merge(parent::context(), [
'foo' => 'bar',
]);
}
The report Helper
Manchmal müssen Sie eine Ausnahme melden, aber die aktuelle Anfrage weiter bearbeiten. Die Berichtshelferfunktion (report helper function) ermöglicht es Ihnen, eine Ausnahme mit der report-Methode Ihres Ausnahmebehandlers schnell zu melden, ohne eine Fehlerseite anzuzeigen:
public function isValid($value)
{
try {
// Validate the value...
} catch (Exception $e) {
report($e);
return false;
}
}
Ignoring Exceptions By Type
Die Eigenschaft $dontReport des Ausnahmebehandlers enthält ein Array von Ausnahmearten, die nicht protokolliert werden. Beispielsweise werden Ausnahmen, die sich aus 404 Fehlern ergeben, sowie einige andere Arten von Fehlern nicht in Ihre Protokolldateien geschrieben. Sie können diesem Array bei Bedarf weitere Ausnahmearten hinzufügen:
/**
* 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,
];