Laravel вывод ошибок в браузере
Этот перевод актуален для англоязычной документации на 28.01.2017 (ветка 5.3) , 08.12.2016 (ветка 5.2) , 19.06.2016 (ветка 5.1) и 08.02.2016 (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Когда вы начинаете новый Laravel проект, обработка ошибок и исключений уже настроена для вас. Все происходящие в вашем приложении исключения записываются в журнал и отображаются пользователю в классе App\Exceptions\Handler . В этой статье мы подробно рассмотрим этот класс.
Для журналирования Laravel использует библиотеку Monolog, которая обеспечивает поддержку различных мощных обработчиков журналов. В Laravel настроены несколько из них, благодаря чему вы можете выбрать между единым файлом журнала, ротируемыми файлами журналов и записью информации в системный журнал.
Настройка
Детализация ошибок
Параметр conf debug в файле настроек config/app.php определяет, сколько информации об ошибке показывать пользователю. По умолчанию этот параметр установлен в соответствии со значением переменной среды APP_DEBUG , которая хранится в файле .env .
Для локальной разработки вам следует установить переменную среды APP_DEBUG в значение true . В продакшн-среде эта переменная всегда должна иметь значение false . Если значение равно true на продакшн-сервере, вы рискуете раскрыть важные значения настроек вашим конечным пользователям.
Хранилище журналов
Изначально Laravel поддерживает запись журналов в единый файл ( single ), в отдельные файлы за каждый день ( daily ), в syslog и errorlog . Для использования определённого механизма хранения вам надо изменить параметр conf log в файле config/app.php . Например, если вы хотите использовать ежедневные файлы журнала вместо единого файла, вам надо установить значение log равное daily в файле настроек app :
Максимальное число ежедневных файлов журнала
При использовании режима daily Laravel по умолчанию хранит журналы только за последние 5 дней. Если вы хотите изменить число хранимых файлов, добавьте в файл app значение для параметра log_max_files :
Уровни важности событий
После задания этого параметра Laravel будет записывать события всех уровней начиная с указанного и выше. Например, при conf log_level равном error будут записываться события error, critical, alert и emergency:
В Monolog используются следующие уровни важности — от меньшего к большему: debug , info , notice , warning , error , critical , alert , emergency .
Изменение настроек Monolog
Если вы хотите иметь полный контроль над конфигурацией Monolog для вашего приложения, вы можете использовать метод приложения PHP configureMonologUsing () . Вызов этого метода необходимо поместить в файл bootstrap/app.php прямо перед тем, как в нём возвращается переменная PHP $app :
Обработчик исключений
Метод PHP report ()
Все исключения обрабатываются классом App\Exceptions\Handler . Этот класс содержит два метода: PHP report () и PHP render () . Рассмотрим каждый из них подробнее. Метод PHP report () используется для занесения исключений в журнал или для отправки их во внешний сервис, такой как BugSnag или Sentry. По умолчанию метод PHP report () просто передаёт исключение в базовую реализацию родительского класса, где это исключение зафиксировано. Но вы можете регистрировать исключения как пожелаете.
Например, если вам необходимо сообщать о различных типах исключений разными способами, вы можете использовать оператор сравнения PHP PHP instanceof ::
Игнорирование исключений заданного типа
Свойство обработчика исключений PHP $dontReport содержит массив с типами исключений, которые не будут заноситься в журнал. Например, исключения, возникающие при ошибке 404, а также при некоторых других типах ошибок, не записываются в журналы. При необходимости вы можете включить другие типы исключений в этот массив:
Метод PHP render ()
Вспомогательный метод PHP abort () немедленно создаёт исключение, которое будет отрисовано обработчиком исключений. Или вы можете предоставить такой отклик:
Журналы
Laravel обеспечивает простой простой уровень абстракции над мощной библиотекой Monolog. По умолчанию Laravel настроен на создание файла журнала в storage/logs . Вы можете записывать информацию в журнал при помощи фасада Log :
Регистратор событий предоставляет восемь уровней журналирования, описанных в RFC 5424: debug, info, notice, warning, error, critical, alert и emergency.
Контекстная информация
Также в методы журналирования может быть передан массив контекстных данных:
Обращение к низкоуровневому экземпляру Monolog
В Monolog доступно множество дополнительных обработчиков для журналов. При необходимости вы можете получить доступ к низкоуровневому экземпляру Monolog, используемому в Laravel:
Комментарии (1)
v5.5 При использовании режима daily, каждый новый файл создается с ограниченными правами и выпадает ошибка permission deny для этого нового файла. Исправляет только ручное изменение прав на каждый новый дневной файл
Возможности логгирования для вашего приложения описаны в классе Illuminate\Foundation\Bootstrap\ConfigureLogging . Это класс использует параметр log из файла config/app.php .
По умолчанию, логгер настроен на ежедневную смену файла, но вы можете изменить это поведение. Так как Laravel использует для логгирования популярную библиотеку Monolog, то вы можете использовать большое количество существующих обработчиков, которые предлагает Monolog.
Например, если вы хотите, чтобы все логи писались в один файл вместо ежедневной смены файла, вы можете изменить файл config/app.php так:
«Из коробки» Laravel поддерживает три режима логгирования: single , daily , and syslog , но вы можете настроить механизм логгирования так, как вам нужно путём переопределения класса ConfigureLogging .
Детализация ошибок
Подробная детализация ошибок вашего приложения, отображаемая в браузере, контролируется параметром app.debug в файле config/app.php По умолчанию этот параметр определяется переменной среды окружения APP_DEBUG , которая установлена в файле .env .
Во время разработки на локальной машине рекомендуется установить значение переменной APP_DEBUG в true .
Примечание Настоятельно рекомендуется отключать детализацю ошибок для рабочей среды выполнения.
Обработка ошибок
Все исключения обрабатываются классом App\Exceptions\Handler , который содержит два метода: report и render
Метод report используется для логгирования исключений в файл или отправки информации на сторонний сервис логгирования типа BugSnag. По умолчанию, метод report просто передаёт исключение своему базовому классу, который его логгирует, однако вы можете изменить это поведение. Если необходимо обрабатывать разные типы исключений разными путями, то можно использовать оператор PHP instanceof :
Свойство dontReport обработчика исключения содержит массив типов исключений, которые не будут логгироваться. По умолчанию, исключения, выброшенные в результате ошибки 404 не логгируются. Вы можете добавить и другие типы исключений в этот массив.
Опционально, вы можете установить свой ответ для возврата в браузер:
Эти исключения могут быть возбуждены на любом этапе обработки запроса.
Изменение страницы 404
Для изменения страницы, выдаваемой при ошибке 404, необходимо создать файл resources/views/errors/404.blade.php .
Логирование
Стандартный механизм логирования представляет собой простую надстройку над мощной системой Monolog. По умолчанию Laravel настроен так, чтобы создавать новый лог-файл каждый день в каталоге storage/logs . Вы можете записывать в лог информацию таким образом:
Журнал предоставляет 7 уровней критичности, определённые в RFC 5424: debug, info, notice, warning, error, critical и alert.
В метод записи можно передать массив данных о текущем состоянии:
Monolog имеет множество других методов, которые вам могут пригодиться. Если нужно, вы можете получить экземпляр его класса:
Когда вы начинаете новый Laravel проект, обработка ошибок и исключений уже настроена для вас. Все происходящие в вашем приложении исключения записываются в журнал и отображаются пользователю в классе App\Exceptions\Handler . В этой документации мы подробно рассмотрим этот класс.
Для логгирования Laravel использует библиотеку Monolog, которая обеспечивает поддержку различных мощных обработчиков логов. В Laravel настроены несколько из них, благодаря чему вы можете выбрать между единым файлом журнала, ротируемыми файлами журналов и записью информации в системный журнал.
Настройка
Детализация ошибок
Параметр debug в файле настроек config/app.php определяет, сколько информации об ошибке показывать пользователю. По умолчанию этот параметр установлен в соответствии со значением переменной среды APP_DEBUG , которая хранится в файле .env .
Для локальной разработки вам следует установить переменную среды APP_DEBUG в значение true . В продакшн-среде эта переменная всегда должна иметь значение false . Если значение равно true , на продакшн-сервере, вы рискуете раскрыть важные значения настроек вашим конечным пользователям.
Хранилище логов
Изначально Laravel поддерживает запись журналов в единые файлы single , в отдельные файлы для каждого дня daily , в syslog и errorlog . Для использования определённого механизма хранения вам надо изменить параметр log в файле config/app.php . Например, если вы хотите использовать ежедневные файлы логов вместо единого файла, вам надо установить значение log равное daily в файле настроек app :
Максимальное число ежедневных файлов логов
При использовании режима daily Laravel по умолчанию хранит логи только за последние пять дней. Если вы хотите изменить число хранимых файлов, добавьте в файл app значение для параметра log_max_files :
Коды серьёзности логов
После задания этого параметра Laravel будет записывать события всех уровней начиная с указанного и выше. Например, при log_level равном error будут записываться события error, critical, alert и emergency:
В Monolog используются следующие уровни серьёзности — от меньшего к большему: debug , info , notice , warning , error , critical , alert , emergency .
Пользовательская настройка Monolog
Если вы хотите иметь полный контроль над конфигурацией Monolog для вашего приложения, вы можете использовать метод приложения configureMonologUsing . Вызов этого метода необходимо поместить в файл bootstrap/app.php прямо перед тем, как в нём возвращается переменная $app :
Обработчик исключений
Метод Report
Все исключения обрабатываются классом App\Exceptions\Handler . Этот класс содержит два метода: report и render . Рассмотрим каждый из них подробнее. Метод report используется для занесения исключений в журнал или для отправки их во внешний сервис, такой как Bugsnag или Sentry. По умолчанию метод report просто передаёт исключение в базовую реализацию родительского класса, где это исключение зафиксировано. Но вы можете регистрировать исключения как пожелаете.
Например, если вам необходимо сообщать о различных типах исключений разными способами, вы можете использовать оператор сравнения PHP instanceof :
Игнорирование исключений заданного типа
Свойство обработчика исключений $dontReport содержит массив с типами исключений, которые не будут заноситься в журнал. Например, исключения, возникающие при ошибке 404, а также при некоторых других типах ошибок, не записываются в журналы. При необходимости вы можете включить другие типы исключений в этот массив:
Метод Render
Некоторые исключения описывают коды HTTP-ошибок от сервера. Например, это может быть ошибка "страница не найдена" (404), "ошибка авторизации" (401) или даже сгенерированная разработчиком ошибка 500. Для возврата такого отклика из любого места в приложении можете использовать хелпер abort :
Хелпер abort немедленно создаёт исключение, которое будет отрисовано обработчиком исключений. Или вы можете предоставить такой отклик:
Логгирование
Laravel обеспечивает простой простой уровень абстракции над мощной библиотекой Monolog. По умолчанию Laravel настроен на создание файла журнала в директории storage/logs . Вы можете записывать информацию в журнал при помощи фасада Log :
Регистратор событий предоставляет восемь уровней логгирования, как описано в RFC 5424: emergency, alert, critical, error, warning, notice, info и debug.
Контекстная информация
Также в методы логгирования можно передать массив контекстных данных:
Обращение к расположенному ниже экземпляру Monolog
В Monolog доступно множество дополнительных обработчиков для журналов. При необходимости вы можете получить доступ к расположенному ниже экземпляру Monolog, используемому в Laravel:
Возможности логгирования для вашего приложения описаны в классе Illuminate\Foundation\Bootstrap\ConfigureLogging . Это класс использует параметр log из файла config/app.php .
По умолчанию, логгер настроен на ежедневную смену файла, но вы можете изменить это поведение. Так как Laravel использует для логгирования популярную библиотеку Monolog, то вы можете использовать большое количество существующих обработчиков, которые предлагает Monolog.
Например, если вы хотите, чтобы все логи писались в один файл вместо ежедневной смены файла, вы можете изменить файл config/app.php так:
«Из коробки» Laravel поддерживает три режима логгирования: single , daily , and syslog , но вы можете настроить механизм логгирования так, как вам нужно путём переопределения класса ConfigureLogging .
Детализация ошибок
Подробная детализация ошибок вашего приложения, отображаемая в браузере, контролируется параметром app.debug в файле config/app.php По умолчанию этот параметр определяется переменной среды окружения APP_DEBUG , которая установлена в файле .env .
Во время разработки на локальной машине рекомендуется установить значение переменной APP_DEBUG в true .
Примечание Настоятельно рекомендуется отключать детализацю ошибок для рабочей среды выполнения.
Обработка ошибок
Все исключения обрабатываются классом App\Exceptions\Handler , который содержит два метода: report и render
Метод report используется для логгирования исключений в файл или отправки информации на сторонний сервис логгирования типа BugSnag. По умолчанию, метод report просто передаёт исключение своему базовому классу, который его логгирует, однако вы можете изменить это поведение. Если необходимо обрабатывать разные типы исключений разными путями, то можно использовать оператор PHP instanceof :
Свойство dontReport обработчика исключения содержит массив типов исключений, которые не будут логгироваться. По умолчанию, исключения, выброшенные в результате ошибки 404 не логгируются. Вы можете добавить и другие типы исключений в этот массив.
Опционально, вы можете установить свой ответ для возврата в браузер:
Эти исключения могут быть возбуждены на любом этапе обработки запроса.
Изменение страницы 404
Для изменения страницы, выдаваемой при ошибке 404, необходимо создать файл resources/views/errors/404.blade.php .
Логирование
Стандартный механизм логирования представляет собой простую надстройку над мощной системой Monolog. По умолчанию Laravel настроен так, чтобы создавать новый лог-файл каждый день в каталоге storage/logs . Вы можете записывать в лог информацию таким образом:
Журнал предоставляет 7 уровней критичности, определённые в RFC 5424: debug, info, notice, warning, error, critical и alert.
В метод записи можно передать массив данных о текущем состоянии:
Monolog имеет множество других методов, которые вам могут пригодиться. Если нужно, вы можете получить экземпляр его класса:
Этот перевод актуален для англоязычной документации на 28.01.2017 (ветка 5.3) , 08.12.2016 (ветка 5.2) , 19.06.2016 (ветка 5.1) и 08.02.2016 (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Когда вы начинаете новый Laravel проект, обработка ошибок и исключений уже настроена для вас. Все происходящие в вашем приложении исключения записываются в журнал и отображаются пользователю в классе App\Exceptions\Handler . В этой статье мы подробно рассмотрим этот класс.
Для журналирования Laravel использует библиотеку Monolog, которая обеспечивает поддержку различных мощных обработчиков журналов. В Laravel настроены несколько из них, благодаря чему вы можете выбрать между единым файлом журнала, ротируемыми файлами журналов и записью информации в системный журнал.
Настройка
Детализация ошибок
Параметр conf debug в файле настроек config/app.php определяет, сколько информации об ошибке показывать пользователю. По умолчанию этот параметр установлен в соответствии со значением переменной среды APP_DEBUG , которая хранится в файле .env .
Для локальной разработки вам следует установить переменную среды APP_DEBUG в значение true . В продакшн-среде эта переменная всегда должна иметь значение false . Если значение равно true на продакшн-сервере, вы рискуете раскрыть важные значения настроек вашим конечным пользователям.
Хранилище журналов
Изначально Laravel поддерживает запись журналов в единый файл ( single ), в отдельные файлы за каждый день ( daily ), в syslog и errorlog . Для использования определённого механизма хранения вам надо изменить параметр conf log в файле config/app.php . Например, если вы хотите использовать ежедневные файлы журнала вместо единого файла, вам надо установить значение log равное daily в файле настроек app :
Максимальное число ежедневных файлов журнала
При использовании режима daily Laravel по умолчанию хранит журналы только за последние 5 дней. Если вы хотите изменить число хранимых файлов, добавьте в файл app значение для параметра log_max_files :
Уровни важности событий
После задания этого параметра Laravel будет записывать события всех уровней начиная с указанного и выше. Например, при conf log_level равном error будут записываться события error, critical, alert и emergency:
В Monolog используются следующие уровни важности — от меньшего к большему: debug , info , notice , warning , error , critical , alert , emergency .
Изменение настроек Monolog
Если вы хотите иметь полный контроль над конфигурацией Monolog для вашего приложения, вы можете использовать метод приложения PHP configureMonologUsing () . Вызов этого метода необходимо поместить в файл bootstrap/app.php прямо перед тем, как в нём возвращается переменная PHP $app :
Обработчик исключений
Метод PHP report ()
Все исключения обрабатываются классом App\Exceptions\Handler . Этот класс содержит два метода: PHP report () и PHP render () . Рассмотрим каждый из них подробнее. Метод PHP report () используется для занесения исключений в журнал или для отправки их во внешний сервис, такой как BugSnag или Sentry. По умолчанию метод PHP report () просто передаёт исключение в базовую реализацию родительского класса, где это исключение зафиксировано. Но вы можете регистрировать исключения как пожелаете.
Например, если вам необходимо сообщать о различных типах исключений разными способами, вы можете использовать оператор сравнения PHP PHP instanceof ::
Игнорирование исключений заданного типа
Свойство обработчика исключений PHP $dontReport содержит массив с типами исключений, которые не будут заноситься в журнал. Например, исключения, возникающие при ошибке 404, а также при некоторых других типах ошибок, не записываются в журналы. При необходимости вы можете включить другие типы исключений в этот массив:
Метод PHP render ()
Вспомогательный метод PHP abort () немедленно создаёт исключение, которое будет отрисовано обработчиком исключений. Или вы можете предоставить такой отклик:
Журналы
Laravel обеспечивает простой простой уровень абстракции над мощной библиотекой Monolog. По умолчанию Laravel настроен на создание файла журнала в storage/logs . Вы можете записывать информацию в журнал при помощи фасада Log :
Регистратор событий предоставляет восемь уровней журналирования, описанных в RFC 5424: debug, info, notice, warning, error, critical, alert и emergency.
Контекстная информация
Также в методы журналирования может быть передан массив контекстных данных:
Обращение к низкоуровневому экземпляру Monolog
В Monolog доступно множество дополнительных обработчиков для журналов. При необходимости вы можете получить доступ к низкоуровневому экземпляру Monolog, используемому в Laravel:
Комментарии (1)
v5.5 При использовании режима daily, каждый новый файл создается с ограниченными правами и выпадает ошибка permission deny для этого нового файла. Исправляет только ручное изменение прав на каждый новый дневной файл
Читайте также: