добавлено в 4.1 ()
Настройка
Обработчик журналов для вашего приложения зарегистрирован в старт-файле app/start/global.php. По умолчанию регистратор событий настроен на использование одного файла для ведения журнала; но вы можете изменить это при необходимости. Так как Laravel использует популярную библиотеку для ведения журналов Monolog, вы можете воспользоваться различными обработчиками, которые она предлагает.
Например, если вы хотите использовать однодневные файлы журналов, а не один большой файл, вы можете сделать следующее изменение в вашем старт-файле:
$logFile = 'laravel.log';
Log::useDailyFiles(storage_path().'/logs/'.$logFile);
Детализация ошибок
По умолчанию в Laravel включена детализация ошибок, происходящих в вашем приложении. Это значит, что при их возникновении будет отображена страница с цепочкой вызовов и текстом ошибки. Вы можете отключить детализацию ошибок установкой настройки debug файла app/config/app.php в значение PHPfalse
.
Настоятельно рекомендуется отключать детализацию ошибок для производственных серверов.
Обработка ошибок
Файл app/start/global.php по умолчанию содержит обработчик любых исключений:
App::error(function (Exception $exception) {
Log::error($exception);
});
Это самый примитивный обработчик. Однако вы можете зарегистрировать несколько обработчиков, если вам это нужно. Они будут вызываться в зависимости от типа PHPException
, указанного в их первом аргументе. Например, вы можете создать обработчик только для ошибок PHPRuntimeException
:
App::error(function (RuntimeException $exception) {
// Обработка исключения...
});
Если обработчик возвращает ответ, он будет отправлен в браузер и никакие другие обработчики вызваны не будут:
App::error(function (InvalidUserException $exception) {
Log::error($exception);
return 'Извини! Что-то не так с этим аккаунтом!';
});
Вы можете зарегистрировать обработчик критических ошибок PHP методом PHPApp::fatal()
:
App::fatal(function ($exception) {
//
});
Если у вас есть несколько обработчиков исключений, то они должны быть определены по порядку от самого общего до самого конкретного. Например, обработчик, который обрабатывает все исключения типа PHPExeption
должен быть определён перед тем, который обрабатывает пользовательский тип исключений, такой как PHPIlluminate\Encryption\DecryptException
.
Где разместить обработчики ошибок
Для регистрации обработчиков ошибок нет места по умолчанию. В этом Laravel предоставляет вам полную свободу. Одним из вариантов — определение обработчиков в вашем файле start/global.php. В общем это удобное расположение для размещения любого кода начальной загрузки. Если файл разрастается, то вы можете создать файл app/errors.php, и «запрашивать» этот файл из вашего скрипта start/global.php. Третий вариант — создать поставщик услуг, который будет регистрировать обработчиков. Опять же, здесь нет единственного «правильного» варианта. Выберите то место, которое вас устраивает.
Исключения HTTP
Некоторые исключения описывают коды HTTP-ошибок от сервера. Например, это может быть ошибка «страница не найдена» (404), «ошибка авторизации» (401) или даже сгенерированная разработчиком ошибка 500. Для того, чтобы отправить такой ответ, используйте следующее:
App::abort(404);
При желании, вы можете указать описание:
App::abort(403, 'Требуется авторизация.');
Этот метод может быть использован на любом этапе обработки запроса.
Обработка 404
Вы можете зарегистрировать обработчик для всех ошибок 404 («Не найдено») в вашем приложении, что позволит вам легко отображать собственную страницу 404:
App::missing(function ($exception) {
return Response::view('errors.missing', array(), 404);
});
Журнал
Стандартный механизм журналирования представляет собой простую надстройку над мощной библиотекой Monolog. По умолчанию Laravel настроен для создания одного большого файла журнала для вашего приложения и хранения его в app/storage/logs/laravel.log. Вы можете записывать в него таким образом:
Log::info('Вот кое-какая полезная информация.');
Log::warning('Что-то может идти не так.');
Log::error('Что-то действительно идёт не так.');
Журнал предоставляет 7 уровней критичности, определённые в RFC 5424 (в порядке возрастания — прим. пер.): debug, info, notice, warning, error, critical и alert.
В метод записи можно передать массив данных о текущем состоянии:
Log::info('Log message', array('context' => 'Другая полезная информация.'));
Monolog имеет множество других методов, которые вам могут пригодиться. Если нужно, вы можете получить экземпляр его класса:
$monolog = Log::getMonolog();
Вы также можете зарегистрировать обработчик события для отслеживания всех новых сообщений.
Отслеживание новых сообщений в журнале
Log::listen(function ($level, $message, $context) {
//
});