Метод report
Метод report класса Handler отвечает за логирование исключений в Laravel. Он вызывается автоматически при возникновении исключения и позволяет управлять тем, как и куда будут записываться ошибки. По умолчанию метод передаёт исключение в систему логирования Laravel, которая использует настроенный драйвер (например, stack, single или daily). Вы можете переопределить этот метод в своём классе Handler, чтобы добавить кастомную логику логирования, например, отправку уведомлений в Slack или запись в базу данных.
Синтаксис
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
public function report(Throwable $e): void
{
parent::report($e);
// Дополнительная логика
}
}
?>
Метод принимает один параметр - объект исключения, реализующий интерфейс Throwable. Возвращаемого значения нет (void). Внутри метода можно вызвать родительский метод для сохранения стандартного поведения или полностью переопределить логику.
Пример
Базовое использование метода report для логирования исключения в файл:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
public function report(Throwable $e): void
{
parent::report($e);
// Дополнительное логирование
\Log::channel('daily')->error('Custom log: ' . $e->getMessage());
}
}
?>
Пример
Пример отправки уведомления в Slack при возникновении критической ошибки:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use IlluminateSupportFacadesLog;
use Throwable;
class Handler extends ExceptionHandler
{
public function report(Throwable $e): void
{
if ($this->shouldReport($e)) {
Log::channel('slack')->critical('Critical error: ' . $e->getMessage(), [
'file' => $e->getFile(),
'line' => $e->getLine(),
'trace' => $e->getTraceAsString()
]);
}
parent::report($e);
}
}
?>
Результат выполнения кода в логе Slack:
"Critical error: Division by zero"
Пример
Переопределение метода report для игнорирования определённых исключений:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use IlluminateDatabaseEloquentModelNotFoundException;
use Throwable;
class Handler extends ExceptionHandler
{
public function report(Throwable $e): void
{
if ($e instanceof ModelNotFoundException) {
// Не логируем ошибки ModelNotFoundException
return;
}
parent::report($e);
}
}
?>
Пример
Использование метода report для записи в базу данных:
<?php
namespace AppExceptions;
use IlluminateFoundationExceptionsHandler as ExceptionHandler;
use AppModelsErrorLog;
use Throwable;
class Handler extends ExceptionHandler
{
public function report(Throwable $e): void
{
ErrorLog::create([
'message' => $e->getMessage(),
'code' => $e->getCode(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'trace' => $e->getTraceAsString(),
'created_at' => now()
]);
parent::report($e);
}
}
?>
Смотрите также
-
метод
render,
который отвечает за отображение исключений -
метод
shouldReport,
который определяет, нужно ли логировать исключение -
класс
Handler,
который обрабатывает все исключения в приложении -
метод
reportable,
который позволяет регистрировать кастомные обработчики