Может войдёшь?
Черновики Написать статью Профиль

Ошибки и журнал

перевод документация 4.x

  1. 1. Настройка
    1. 1.1. Детализация ошибок
  2. 2. Обработка ошибок
    1. 2.1. Где разместить обработчики ошибок
  3. 3. Исключения HTTP
  4. 4. Обработка 404
  5. 5. Журнал
Этот перевод актуален для англоязычной документации на (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.
+ 4.1

добавлено в 4.1 ()

Настройка

Обработчик журналов для вашего приложения зарегистрирован в старт-файле app/start/global.php. По умолчанию регистратор событий настроен на использование одного файла для ведения журнала; но вы можете изменить это при необходимости. Так как Laravel использует популярную библиотеку для ведения журналов Monolog, вы можете воспользоваться различными обработчиками, которые она предлагает.

Например, если вы хотите использовать однодневные файлы журналов, а не один большой файл, вы можете сделать следующее изменение в вашем старт-файле:

PHP
$logFile 'laravel.log';

Log::useDailyFiles(storage_path().'/logs/'.$logFile);

Детализация ошибок

По умолчанию в Laravel включена детализация ошибок, происходящих в вашем приложении. Это значит, что при их возникновении будет отображена страница с цепочкой вызовов и текстом ошибки. Вы можете отключить детализацию ошибок установкой настройки debug файла app/config/app.php в значение PHPfalse.

Настоятельно рекомендуется отключать детализацию ошибок для производственных серверов.

Обработка ошибок

Файл app/start/global.php по умолчанию содержит обработчик любых исключений:

PHP
App::error(function (Exception $exception) {
  
Log::error($exception);
});

Это самый примитивный обработчик. Однако вы можете зарегистрировать несколько обработчиков, если вам это нужно. Они будут вызываться в зависимости от типа PHPException, указанного в их первом аргументе. Например, вы можете создать обработчик только для ошибок PHPRuntimeException:

PHP
App::error(function (RuntimeException $exception) {
  
// Обработка исключения...
});

Если обработчик возвращает ответ, он будет отправлен в браузер и никакие другие обработчики вызваны не будут:

PHP
App::error(function (InvalidUserException $exception) {
  
Log::error($exception);

  return 
'Извини! Что-то не так с этим аккаунтом!';
});

Вы можете зарегистрировать обработчик критических ошибок PHP методом PHPApp::fatal():

PHP
App::fatal(function ($exception) {
  
//
});

Если у вас есть несколько обработчиков исключений, то они должны быть определены по порядку от самого общего до самого конкретного. Например, обработчик, который обрабатывает все исключения типа PHPExeption должен быть определён перед тем, который обрабатывает пользовательский тип исключений, такой как PHPIlluminate\Encryption\DecryptException.

Где разместить обработчики ошибок

Для регистрации обработчиков ошибок нет места по умолчанию. В этом Laravel предоставляет вам полную свободу. Одним из вариантов — определение обработчиков в вашем файле start/global.php. В общем это удобное расположение для размещения любого кода начальной загрузки. Если файл разрастается, то вы можете создать файл app/errors.php, и «запрашивать» этот файл из вашего скрипта start/global.php. Третий вариант — создать поставщик услуг, который будет регистрировать обработчиков. Опять же, здесь нет единственного «правильного» варианта. Выберите то место, которое вас устраивает.

Исключения HTTP

Некоторые исключения описывают коды HTTP-ошибок от сервера. Например, это может быть ошибка «страница не найдена» (404), «ошибка авторизации» (401) или даже сгенерированная разработчиком ошибка 500. Для того, чтобы отправить такой ответ, используйте следующее:

PHP
App::abort(404);

При желании, вы можете указать описание:

PHP
App::abort(403'Требуется авторизация.');

Этот метод может быть использован на любом этапе обработки запроса.

Обработка 404

Вы можете зарегистрировать обработчик для всех ошибок 404 («Не найдено») в вашем приложении, что позволит вам легко отображать собственную страницу 404:

PHP
App::missing(function ($exception) {
  return 
Response::view('errors.missing', array(), 404);
});

Журнал

Стандартный механизм журналирования представляет собой простую надстройку над мощной библиотекой Monolog. По умолчанию Laravel настроен для создания одного большого файла журнала для вашего приложения и хранения его в app/storage/logs/laravel.log. Вы можете записывать в него таким образом:

PHP
Log::info('Вот кое-какая полезная информация.');

Log::warning('Что-то может идти не так.');

Log::error('Что-то действительно идёт не так.');

Журнал предоставляет 7 уровней критичности, определённые в RFC 5424 (в порядке возрастания — прим. пер.): debug, info, notice, warning, error, critical и alert.

В метод записи можно передать массив данных о текущем состоянии:

PHP
Log::info('Log message', array('context' => 'Другая полезная информация.'));

Monolog имеет множество других методов, которые вам могут пригодиться. Если нужно, вы можете получить экземпляр его класса:

PHP
$monolog Log::getMonolog();

Вы также можете зарегистрировать обработчик события для отслеживания всех новых сообщений.

Отслеживание новых сообщений в журнале

PHP
Log::listen(function ($level$message$context) {
  
//
});

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.