Запись ошибок PHP в файл

Обновлено: 21.11.2024

В этом руководстве рассматриваются основы ведения журнала в PHP, в том числе способы настройки ведения журнала, местонахождения журналов и того, как ведение журнала может помочь вам более эффективно устранять неполадки и отслеживать приложения PHP.

Всегда полезно иметь представление об основах, поэтому в этой статье рассматривается журнал ошибок, встроенный в PHP. Если вы настраиваете новое приложение или хотите улучшить существующее, мы рекомендуем вам взглянуть на библиотеки журналов PHP, если вы работаете с пользовательским стеком, или журналы PHP Framework, если вы используете такую ​​​​инфраструктуру, как Laravel или Симфони.

Что касается встроенного журнала ошибок, вам следует помнить о нескольких элементах:

  1. Ошибки, выдаваемые самим механизмом PHP при сбое основной функции или невозможности проанализировать код.
  2. Пользовательские ошибки, которые вызывает ваше приложение, обычно вызванные отсутствием или неправильным вводом данных пользователем.
  3. Действия в вашем приложении, которые вы, возможно, захотите проанализировать позже, например запись при обновлении учетной записи пользователя или обновлении контента в CMS

Давайте начнем с рассмотрения того, как можно настроить механизм PHP для отображения и регистрации ошибок. Эти параметры полезно проверить, если вы настраиваете новый сервер или пытаетесь выяснить, настроено ли ведение журнала на сервере, который настроил кто-то другой.

Конфигурация по умолчанию

По умолчанию конфигурация, относящаяся к ошибкам, находится в следующих директивах в файле конфигурации php.ini. В вашей системе может быть несколько разных файлов php.ini в зависимости от того, как вы используете PHP, будь то в CLI или за веб-сервером, таким как Apache или Nginx. Здесь вы можете найти файл php.ini в распространенных дистрибутивах Linux.

Расположения файлов конфигурации по умолчанию

< td width="226">/etc/php.ini
Операционная система Путь Тип
На основе Debian (Debian, Ubuntu, Linux Mint и т. д.) /etc/php/ 7.3/apache2/php.ini Модуль Apache
Redhat / Fedora / CentOS Все версии
OpenSUSE /etc/php/7.3/apache2/php.ini Модуль Apache

Общие директивы конфигурации

Вы можете найти полный список директив на сайте документации PHP. Вот некоторые из наиболее распространенных директив, относящихся к ведению журнала.

< /tbody>
Директива По умолчанию Рекомендуется Описание
display_errors** 1 0 Определяет, будут ли ошибки включены в вывод.
display_startup_errors 0 0 Отображать ли ошибки последовательности запуска PHP.< /td>
error_log *** 0 путь Путь к файлу журнала ошибок. При запуске PHP в контейнере Docker рассмотрите возможность ведения журнала на стандартный вывод.
error_reporting null E_ALL Минимальный уровень сообщений об ошибках.
log_errors 0 1 Включает регистрацию ошибок.
log_errors_max_length 1024 1024 Максимальная длина зарегистрированных ошибок. Установите ноль, чтобы не было максимума.
report_memleaks 1 0 Сообщает об утечках памяти, обнаруженных диспетчером памяти Zend.
track_errors 0 1 Сохраняет последнее сообщение об ошибке в $php_errormsg.

  • ** Из соображений безопасности измените значение на 0 для веб-серверов.
  • *** Если установлено значение syslog, в системный журнал будут отправляться сообщения об ошибках.

Конфигурация во время выполнения

PHP предоставляет ряд функций для чтения и изменения директив конфигурации во время выполнения. Их можно использовать в приложении для переопределения настроек в php.ini. Возможность изменять значения конфигурации полезна, когда у вас нет доступа к файлам конфигурации PHP (например, в бессерверной среде), при устранении неполадок в приложении или при выполнении определенных задач (например, задания cron, требующего дополнительной памяти). Возможно, вам придется искать вызовы ini_set() в вашем коде, если приложение ведет себя не так, как ожидалось. Например, если вы установили для display_errors значение 1 в php.ini, но по-прежнему не видите вывод ошибок, скорее всего, они где-то переопределены.

ini_get(строка)

Получает текущую настройку директивы.

ini_set(строка, смешанный)

Устанавливает директиву.

Журналы ошибок по умолчанию

Когда log_errors включен, но error_log не определен, ошибки регистрируются в журнале ошибок веб-сервера. Далее следуют расположение по умолчанию для Apache и Nginx. Обратитесь к конфигурации вашего веб-сервера, которая могла быть изменена по сравнению с настройками по умолчанию.

  • Apache: /var/log/apache2/error.log
  • Nginx: /var/log/nginx/error.log

Вот функции, используемые для облегчения ведения журнала ошибок приложений. В следующей таблице перечислены функции PHP, связанные с ведением журнала, а также несколько примеров. Понимание того, как ведение журналов работает в PHP, безусловно, имеет значение, но вам также следует изучить популярные библиотеки ведения журналов PHP из-за функциональности, которую они добавляют.

журнал_ошибок()

Эта функция отправляет сообщение в текущий настроенный журнал ошибок; наиболее распространенное использование:

На сервере Apache это добавит новую строку в /var/log/apache2/error.log.

Подробнее о входе в Apache можно прочитать в этом руководстве.

Вы также можете отправить сообщение в другой файл, однако это не рекомендуется, так как это может привести к путанице.

триггер_ошибка()

Вы можете использовать уровни ошибок E_USER_* в своем приложении, чтобы сообщать об ошибках различной серьезности для регистрации. Как и основные константы, существуют уровни для фатальных ошибок (E_USER_ERROR), предупреждений (E_USER_WARNING) и уведомлений (E_USER_NOTICE). В своем коде используйте функцию trigger_error() для пользовательских ошибок. Если ваш код действительно обнаружил ошибку, используйте trigger_error() с описательным сообщением, чтобы ваш обработчик ошибок знал, что что-то пошло не так, вместо того, чтобы использовать функцию die() для внезапного завершения всего.

Эта функция принимает два параметра: строку сообщения об ошибке и уровень ошибки, как показано ниже.

системный журнал()

Еще один способ протоколирования ошибок – отправить их непосредственно в систему с помощью функции syslog(). В качестве первого параметра принимает уровень ошибки (LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG); второй параметр — это фактическое сообщение об ошибке.

Пример (использование openlog() для соединения):

В приведенном выше примере новое сообщение будет записано в /var/log/syslog:

При регистрации данных вы должны убедиться, что соблюдаете осмысленное соглашение о форматировании, включая такие поля, как дата/время, имя файла, сообщение и т. д. Это позволяет лучше анализировать и искать данные. Вы также можете сделать это отдельной функцией для обработки форматирования журнала. Тот же метод используется в пакете Monolog.

Дополнительную информацию о настройке формата ведения журнала веб-сервера можно найти в нашем руководстве по ведению журналов Apache.

PHP предоставляет различные типы журналов ошибок для определения серьезности ошибок, возникших при запуске вашего приложения. Уровни ошибок указывают, что движок не может проанализировать и скомпилировать ваши операторы PHP или не может получить доступ или использовать ресурс, необходимый вашему приложению, вплоть до сообщения вам о возможной опечатке в имени переменной.

Хотя уровни ошибок являются целочисленными значениями, для каждого из них существуют предопределенные константы. Использование констант облегчит чтение и понимание вашего кода и сохранит его совместимость с будущими версиями при появлении новых уровней ошибок. Распространенные уровни ошибок включают:

  • E_ERROR. Это фатальные ошибки во время выполнения, которые останавливают выполнение скрипта, например нехватка памяти или вызов несуществующей функции.
  • E_WARNING. Предупреждение во время выполнения — это ошибка, которая не останавливает выполнение скрипта, но может привести к тому, что ваш код не будет работать должным образом. Например, fopen() вернет false и вызовет E_WARNING, если вы попытаетесь открыть несуществующий файл. Остальной код не сможет читать или записывать запрошенный файл.
  • E_PARSE — это ошибки синтаксического анализа во время компиляции, например отсутствие скобок или точек с запятой.
  • E_NOTICE. Уведомления указывают на возможные ошибки, например на использование в выражении несуществующей переменной. Это может означать, что в имени переменной есть опечатка или ему нужно присвоить какое-то значение раньше.
  • E_STRICT. Эти ошибки указывают на места в вашем коде, которые могут перестать работать в будущих версиях PHP. Использование mysql_query() вызовет строгую ошибку, потому что расширение, предоставляющее эту функцию, устарело и фактически не включено в PHP 7.

Константы уровня ошибок используются функцией error_reporting(), чтобы указать, какие типы ошибок следует отображать или регистрировать. Обратите внимание, что это также можно настроить в файле INI. Вы также можете использовать побитовые операторы для настройки детализации журналов приложений.

Примечание о подавлении ошибок

Вероятно, вы сталкивались с кодом, в котором перед вызовом функции стоит символ @, который является оператором контроля ошибок. Это подавляет любые ошибки, выдаваемые этой функцией.В конце концов, это означает, что в случае сбоя функции вы не увидите никаких ошибок, связанных с ней, на экране или в ваших журналах. Это плохая практика, и ее следует избегать. Помните, что вы всегда можете настроить собственный обработчик ошибок для обнаружения ошибок.

Если вы пытаетесь исправить ошибку, но не видите никаких ошибок, найдите в своем коде вызовы функций с префиксом в один @. Вы также можете установить и включить расширение крика, которое отключит это поведение и обеспечит отчеты обо всех ошибках.

Рекомендация – установите для уровня ошибки значение E_ALL, если не требуется особый вариант использования. Уведомления и предупреждения могут указывать на то, что переменные создаются не так, как вы думали.

Сообщения журнала можно генерировать вручную, вызывая error_log(), или автоматически при появлении уведомлений, предупреждений или ошибок во время выполнения. По умолчанию журнал ошибок в PHP отключен.

Вы можете включить журнал ошибок одним из двух способов: отредактировав файл php.ini или используя ini_set. Модификация php.ini — правильный способ сделать это. Обязательно перезагрузите веб-сервер после редактирования конфигурации.

Этот параметр времени выполнения необходим только в том случае, если директива log_errors не включена в качестве общей конфигурации по определенной причине, а код вашего приложения требует этого.

Рекомендация — обязательно включите отчеты об ошибках и ведение журналов на веб-серверах и отключите отображение ошибок в ответ. Отображение ошибок в ответ на живую среду является серьезной ошибкой безопасности, и ее следует избегать. Директива display_errors упоминается в следующей конфигурации из соображений безопасности.

Журналирование действий и действий пользователей предоставляет ценный источник информации для просмотра того, какие функции используются, какие шаги предпринимают пользователи для выполнения задач, а также для отслеживания и воссоздания ошибок, с которыми они сталкиваются. Хотя вы можете записывать эту активность в локальный файл, обычно вы хотите записывать ее в существующую службу регистрации, чтобы упростить анализ и создание отчетов. Вместо того, чтобы изобретать свой собственный формат — для этого потребуется специальный анализатор — используйте JSON в качестве формата ведения журнала. JSON — это структурированный формат, который позволяет службам ведения журналов и другим приложениям легко анализировать события. Дополнительную информацию о том, как получить максимальную отдачу от ведения журнала JSON, см. в разделе 8 полезных советов, которые следует учитывать при ведении журнала в формате JSON.

Рекомендация — используйте JSON для регистрации поведения пользователей и ошибок приложений. Сделайте это с самого начала, чтобы не пришлось преобразовывать или терять старые журналы.

Массивы и объекты PHP можно преобразовать в строку JSON с помощью json_encode(). Точно так же JSON можно преобразовать в нативную конструкцию PHP с помощью json_decode(). Далее следуют несколько примеров кода, которые сначала демонстрируют функции, а затем используют их для регистрации и анализа записи.

Пример: использование функции json_encode() с ассоциативным массивом

Пример: использование функции json_decode()

Исключения — это элегантный способ обработки ошибок приложений и последующего ведения журнала. Они либо выбрасываются и перехватываются в блоке try/catch/finally, либо обрабатываются пользовательской функцией исключения.

Исключения используются, когда части логики вашего приложения не могут продолжать нормальное выполнение.

Основное исключение

В PHP есть базовый класс Exception, который по умолчанию доступен в языке. Базовый класс Exception при необходимости можно расширить.

Пример: (предполагается, что директива log_errors = 1)

Приведенный выше пример создаст следующую запись в журнале ошибок:

Пользовательское исключение

Допустим, у вас есть определенная частота ошибок определенного типа, и вы хотели бы настроить специальное исключение для их обработки. В следующем примере мы создадим пользовательское исключение с именем TooManyLoginAttemptsException для обработки слишком большого количества попыток входа в систему.

Определите собственный класс исключений:

Определите класс для генерации пользовательского исключения:

Код пытается войти в систему пользователя, перехватившего пользовательское исключение:

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

Исключения SPL

В PHP есть встроенная библиотека кода, которая называется «Стандартная библиотека PHP» или SPL. В библиотеке определен ряд классов исключений, которые доступны для распространенных ошибок на уровне кода. Эти исключения внутренне расширяются из базового класса PHP Exception. Они различаются только по имени и могут быть брошены, пойманы и зарегистрированы.

Определить класс для создания исключения SPL: (BadMethodCallException)

В примере используется магический метод PHP __call() для перехвата неопределенного вызова метода.

Попытка кода использовать неопределенный метод:

$adapter = новый адаптер();

> поймать (BadMethodCallException $e)

Изменения исключений PHP 7

В PHP 7 иерархия исключений изменилась в ядре. Представлен интерфейс Throwable, и классы Exception и Error реализуют его. Это дает возможность перехватывать внутренние исключения PHP, такие как TypeError, ParseError и т. д.Вплоть до версии PHP 5 неустранимые ошибки нельзя корректно обрабатывать, поскольку они немедленно прерывают выполнение программы. Полная документация приведена здесь.

Интерфейс Throwable нельзя реализовать напрямую с помощью настраиваемых исключений, и для реализации он должен наследоваться от базового класса Exception.

Как мне включить все ошибки и предупреждения и записать их в файл, но настроить все это внутри скрипта (ничего не меняя в php.ini)?

Я хочу определить имя файла, чтобы все ошибки и предупреждения записывались в него.

7 ответов 7

Используйте следующий код:

Затем посмотрите файл:

Или обновите php.ini, как описано в этой записи блога от 2008 года.

ini_set работает, только если этот код выполняется. Бесполезно для кода с ошибками синтаксического анализа, поскольку ошибка будет до выполнения кода. Вместо этого запишите эти изменения в php.ini.

Вы можете настроить обработку ошибок с помощью собственных обработчиков ошибок, чтобы вызывать эту функцию каждый раз, когда возникает ошибка, предупреждение или что-то еще, что вам нужно зарегистрировать. Для получения дополнительной информации обратитесь к главе «Обработка ошибок» в руководстве по PHP

Просто поместите эти коды вверху файла PHP/индекса:

Добавьте этот код в файл .htaccess (в качестве альтернативы файлу php.ini или функции ini_set):

  • как прокомментировано: это для серверов типа Apache, а не для Nginx или других.

Это моя личная короткая функция

Объяснение было бы в порядке. Например, какова идея/суть? Пожалуйста, ответьте, отредактировав (изменив) свой ответ, а не здесь, в комментариях (без «Редактировать:», «Обновить:» или подобных — ответ должен выглядеть так, как если бы он был написан сегодня).

Посмотрите на параметр конфигурации log_errors в php.ini. Кажется, он делает именно то, что вы хотите. Я думаю, что вы также можете использовать параметр error_log, чтобы установить свой собственный файл журнала.

Если для директивы log_errors установлено значение On , любые ошибки, о которых сообщает PHP, будут регистрироваться в журнале сервера или в файле, указанном с помощью error_log . Вы также можете установить эти параметры с помощью ini_set, если вам нужно.

(Обратите внимание, что display_errors должен быть отключен в php.ini, если эта опция включена)

Почему следует отключать display_errors, если вы включили log_errors? На мой взгляд не имеет смысла. :)

Поскольку нет необходимости публиковать содержимое ошибок на рабочем сервере, особенно если текст ошибки незаметно записывается в файл.

Отображение ошибок должно быть всегда отключено на рабочем сервере. Нет, если ведение журнала ошибок настроено где-то еще, но всегда. Ошибки записываются в журнал ошибок apache по умолчанию, этого достаточно часто.

Итак, когда мы сталкиваемся с ошибками в нашем коде, где именно мы можем их найти? На высоком уровне действительно есть только три места, где можно найти ошибки PHP: встроенный в выполнение программы, в системном журнале или в инструментах мониторинга ошибок, таких как Rollbar.

Встроенные ошибки

По умолчанию при возникновении ошибки или исключения PHP отправляет сообщение об ошибке непосредственно пользователю через STDOUT. В среде командной строки это означает, что ошибки отображаются в терминале. В веб-среде ошибки и исключения отображаются непосредственно в браузере.

Хотя это поведение полезно для отладки проблем в среде разработки, его следует отключить в производственной среде из соображений безопасности. Для этого откройте файл конфигурации PHP для среды, в которой вы работаете (обычно он находится по пути, похожем на /etc/php/:environment:/php.ini), и измените директиву display_errors на Off.

Файлы журнала

Отображение ошибок в STDOUT отлично подходит для отладки проблем в среде разработки по мере их возникновения, но не очень полезно в производственной среде. Здесь в игру вступает журнал ошибок. По умолчанию PHP не регистрирует никаких ошибок, а это значит, что это значение должно быть задано явно. Для этого откройте указанный выше файл конфигурации PHP в своем любимом редакторе и найдите директиву error_log.

Есть два возможных значения для error_log: пользовательский файл журнала и системный журнал.Если используется системный журнал, то все ошибки PHP будут отправляться непосредственно в файл системного журнала по умолчанию — в Linux это обычно /var/log/syslog. Более управляемым методом является использование пользовательского файла журнала. Сделав это, вы сможете изолировать журналы своего PHP-приложения от остальных системных журналов, что значительно упростит отладку.

Вход в Laravel

Хотя системный журнал PHP по умолчанию полезен для специализированных приложений, важно отметить, что многие платформы приложений предоставляют свои собственные встроенные механизмы ведения журнала. Отличным примером этого является фреймворк Laravel. В Laravel метод ведения журнала можно изменить в параметре журнала файла конфигурации приложения, который находится в config/app.php.

По умолчанию Laravel поддерживает один файл журнала в storage/logs/laravel.log в каталоге проекта, а не в определенной опции error_log из глобальной конфигурации PHP.

Вход в Symfony

Поскольку Laravel построен на основе Symfony, они используют один и тот же основной механизм ведения журналов, хотя конфигурация этих двух фреймворков различается. Регистрация в Symfony и Laravel выполняется с помощью Monolog, сторонней библиотеки регистрации PHP, которую можно использовать для создания и хранения журналов множеством способов.

По умолчанию журналы Symfony хранятся в var/log/dev.log и var/log/prod.log в каталоге проекта, в зависимости от среды, но эти значения по умолчанию можно изменить в файле конфигурации пакета Monolog, который можно найти по адресу config/packages/monolog.php.

Как выглядят журналы PHP?

Итак, как именно выглядят журналы PHP? В большинстве случаев журналы PHP имеют довольно предсказуемый формат:

Вкратце приведенную выше строку журнала можно разбить на четыре части: дата, имя хоста, процесс и сообщение об ошибке. Всякий раз, когда возникает ошибка или создается необработанное исключение, сообщение об ошибке печатается вместе с датой, именем хоста и метаданными процесса, чтобы помочь точно определить, что произошло, где и когда произошло.

Введение в уровни логирования

Важно отметить, что в PHP есть несколько уровней ведения журнала, которые можно сжать или поднять. Хотя эти уровни журнала определяются самим PHP, понимание того, что они из себя представляют и что означают, является важным шагом на пути к возможности диагностировать проблемы по мере их возникновения.

Если для параметра display_errors установлено значение Вкл., может быть полезно явным образом скрывать и отображать определенные уровни журналов, чтобы вы могли сосредоточиться на одной задаче за раз, например на критических ошибках или очистке предупреждений. Это можно сделать с помощью встроенного метода error_reporting.

Этот метод принимает целочисленное значение, которое сообщает PHP, какие ошибки отображать, а какие игнорировать. Используя побитовые операторы (| означает ИЛИ, & означает И и ~ означает НЕ), мы можем четко и легко определить, какие ошибки мы хотим видеть.

Вот несколько наиболее распространенных уровней ведения журнала. Для получения дополнительной информации об уровнях ведения журналов (их довольно много) обратитесь к официальной документации PHP.

Хороший разработчик всегда внимательно следит за потенциальными ошибками при разработке веб-приложения, обязательно настроив те, которые помогут ему правильно регистрировать ошибки. PHP предлагает несколько надежных методов для работы с журналами ошибок PHP, которые вы можете регистрировать вручную и автоматизировать. Есть также некоторые сторонние инструменты, созданные сообществом открытого исходного кода для управления процессом регистрации ошибок PHP.

Самое главное, когда вы должны регистрировать ошибки и как вы должны это делать? Когда вы работаете в режиме разработки, вы можете регистрировать ошибки PHP по своему желанию. Либо создайте файл журнала ошибок PHP, либо сохраните их как уведомления на разных каналах, вы всегда получаете удобство для регистрации ошибок в соответствии с вашими требованиями.

Тем временем, когда вы работаете в производственном режиме, вы должны создать плавный рабочий процесс, чтобы включить ведение журнала ошибок PHP, чтобы пользователи не сталкивались с какими-либо сбоями во время выполнения.

В этой статье я упомяну несколько полезных советов по регистрации ошибок PHP, которые могут быть полезны начинающим разработчикам.

Разместите у нас свои PHP-приложения, чтобы повысить производительность в 10 раз

Не позволяйте вашим клиентам убегать из-за простоев. Разверните вместе с нами сегодня!

Начало работы с ведением журнала ошибок PHP

PHP – наиболее широко используемый язык программирования для разработки веб-приложений. Согласно исследованиям BuiltWith, сегодня почти 37 805 937 веб-сайтов используют PHP в качестве внутреннего языка, что составляет около 75% всех веб-сайтов в мире. Эта статистика ясно показывает, что PHP по-прежнему занимает солидную долю рынка в мире программирования.

Приступая к разработке приложения на PHP, вы используете несколько команд, таких как print_r() и var_dump(), для отладки ошибок и входа в браузер. Но это не самый безопасный способ при работе в режиме производства.В режиме разработки вы можете это сделать, но должны отключить его при запуске миграции. Следовательно, в режиме разработки вы можете легко регистрировать ошибки в PHP с помощью функции error_log(), которая отправляет сообщение об ошибке в определенные процедуры обработки ошибок.

Предположим, вы подключаете базу данных MySQL к PHP, и если она не может подключиться к ней, вы можете регистрировать ошибки в PHP следующим образом:

Включить регистрацию ошибок в php.ini

Чтобы регистрировать ошибки в PHP, откройте файл php.ini и раскомментируйте/добавьте следующие строки кода.

Если вы хотите включить регистрацию ошибок PHP в отдельных файлах, добавьте этот код в начало файла PHP.

Теперь вы должны включить только один оператор для анализа ошибок журнала в файле php.ini:

display_errors = вкл.

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

Копировать журналы ошибок PHP в файл

Описанные выше методы хорошо работают, когда вы работаете в среде разработки. Но когда вы запустите свой веб-сайт и начнете работать в рабочем режиме, вы должны скрыть ошибки с экрана и зарегистрировать их в файле бэкэнда. Вы можете сохранить их в определенном месте журнала ошибок PHP, URL-адрес которого уже описан в файле php.ini.

PHP хранит журналы ошибок в /var/log/apache2, если он использует модуль apache2. Общие хосты, как правило, хранят файлы журналов ошибок PHP в подпапке /log вашего корневого каталога. Но… если у вас есть доступ к файлу php.ini, вы можете сделать это следующим образом:

error_log = /var/log/php-scripts.log

Если вы используете cPanel, главный файл журнала, который вы, вероятно, ищете, хранится (по умолчанию) по адресу:

/usr/local/apache/logs/error_log

Если ничего не помогает, вы можете проверить расположение журналов ошибок PHP, используя:

Ошибка регистрации в PHP Framework

Описанные выше шаги относятся к базовой разработке PHP. В PHP есть множество архитектур Model View (MVC) и микрофреймворков, в которых есть свои методы поверх основных функций. Одни из лучших фреймворков PHP MVC для создания продвинутых веб-приложений, в том числе: Laravel, CodeIgniter и Symfony.

Ошибка входа в Laravel

Когда вы настраиваете новый проект Laravel, в нем предварительно настроены регистрация ошибок и обработка исключений. В Laravel есть отдельный класс App\Exceptions\Handler, который решает все эти проблемы. Для регистрации ошибок Laravel используется библиотека Monolog, которая поддерживает различные обработчики журналов. Laravel настраивает для вас несколько таких обработчиков, позволяя вам выбирать между одним файлом журнала ошибок PHP, ротацией файлов журнала и записью информации об ошибке в системный журнал.

В файле config/app.php вы можете настроить параметр отладки PHP для регистрации ошибок на дисплее пользователя. Значение этой опции можно установить в файле .env в свойстве APP_DEBUG, которое является переменной среды, таким образом, настраивая в файле app.php. При локальной разработке значение можно установить в true, а после миграции в продакшн нужно установить в false. В противном случае всегда возникает проблема безопасности, поскольку на экране браузера будет отображаться ошибка.

Вы, как разработчик, можете сохранять информацию журнала Laravel в одном файле, ежедневном файле, системном журнале и журнале ошибок. Чтобы настроить эти параметры для ведения журнала ошибок Laravel, вы должны открыть файл app.php и отредактировать параметр журнала. Например, если вы хотите настроить ежедневную регистрацию ошибок, вы должны сделать следующее:

Monolog может регистрировать ошибки с различными предупреждениями безопасности. По умолчанию он добавляет все ошибки в хранилище, но вы можете идентифицировать их как ошибки, аварийные ситуации, предупреждения, критические и предупреждения. Для этого добавьте свойство log_level в такие параметры:

'log_level' => env('APP_LOG_LEVEL', 'ошибка'),

Файл журнала находится в папке storage/logs . Вы также можете регистрировать ошибки, используя лог-фасады.

Symfony поставляется с регистратором по умолчанию, который вы можете внедрить в контроллер, показывая различные уровни предупреждений. По умолчанию записи журнала записываются в файл var/log/dev.log, когда вы находитесь в среде разработки. В рабочей среде журналы записываются в файл var/log/prod.log .

Поскольку Symfony является родительской платформой для Laravel, уровни предупреждений фреймворка также одинаковы.

Symfony также использует Monolog для регистрации ошибок и предварительно настраивает некоторые базовые обработчики в файле monolog.yaml по умолчанию. Ниже приведен пример, в котором системные журналы используются для записи журналов в файл:

Автоматизация процесса регистрации ошибок PHP

Всю работу по регистрации ошибок можно выполнять вручную, но если вы работаете в нескольких командах и над крупными проектами, вам необходимо настроить автоматизированный рабочий процесс, который может регистрировать ошибки в сторонних службах, таких как Sentry, Slack, Blackfire и т. д. .

Эти инструменты помогут вам лучше понять ошибки и способы их устранения. Вы также можете настроить каналы Slack для отправки быстрых уведомлений командам о любых инцидентах во время выполнения.

Вы можете увидеть этот хороший пример в Symfony, который также работает аналогично.

Предположим, вы уже настроили канал Slack и веб-перехватчики как:

Эмодзи также настроены в приведенном выше примере. Вы видели это? 😀 Это показывает, как вы можете отправлять уведомления Slack на любой конкретный канал в соответствии с вашими потребностями.

Как регистрируются ошибки PHP в Cloudways

Когда вы создаете учетную запись на веб-хостинге Cloudways для PHP и запускаете сервер PHP с приложением, вы можете увидеть папку журнала в корневом каталоге, которая отвечает за журналы сервера. Там вы можете найти журналы Apache и Nginx, которые помогут вам определить журналы потенциальных ошибок. Поскольку Cloudways не позволяет пользователям редактировать файл php.ini (вы можете попросить агента поддержки сделать это за вас); но если вы внимательно просмотрите настройки сервера PHP, вы сможете настроить большинство параметров error_reporting и ведения журнала на платформе.

Конечно, у вас также есть доступ к PHP-FPM, где вы можете добавить правила php.ini для регистрации ошибок PHP.

В: Какую библиотеку протоколирования ошибок PHP лучше всего использовать?

О: Monolog — одна из лучших библиотек регистрации ошибок PHP, доступных на рынке. Он обеспечивает расширенные операции ведения журнала для различных обработчиков, включая базу данных, консоль браузера, решения для чатов и другие.

В: Что делать, если журнал ошибок PHP не работает?

A: Во-первых, установите log_errors = on в файле php.ini, это может помочь, если ваш журнал ошибок PHP не работает.
Если это все еще не работает, убедитесь, что директива error_log задана и каталог в ней должен быть доступен для записи пользователю, под которым запущен Apache.

Заключительные слова

В этой статье подробно показано, как регистрировать ошибки в PHP путем настройки файла php.ini. Потому что обработка ошибок — одна из основных задач разработчиков веб-сайтов, и знание правильного способа регистрации ошибок — как в режиме разработки, так и в рабочем режиме — для них серьезная работа. В этой статье представлен простой способ включить и автоматизировать ведение журнала ошибок PHP, чтобы поддерживать работу разработчиков в нужном русле.

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

Поделиться этой статьей

Отзыв клиента на

"У хостинга Cloudways один из лучших сервисов и скорость хостинга"

Санджит С [разработчик веб-сайта]

Шахрозе Наваз

Шахрозе — менеджер сообщества PHP в Cloudways — управляемой платформе PHP-хостинга. Помимо работы, он любит кино и путешествия. Вы можете написать ему по адресу [email protected]

Читайте также: