Централизованная отчетность об ошибках в PHP - PullRequest
4 голосов
/ 04 апреля 2009

Есть ли способ обрабатывать отчеты об ошибках централизованно в PHP? Я хотел бы получать уведомления обо всех ошибках, вызванных моей заявкой, по электронной почте.

Какой лучший способ добиться этого для всего приложения?

Спасибо

Ответы [ 3 ]

8 голосов
/ 04 апреля 2009

Вы можете использовать set_error_handler для обработки ошибок во время выполнения любым удобным вам способом.

6 голосов
/ 04 апреля 2009

Как упоминал Калиум, вы захотите использовать set_error_handler, но это только поможет вам в этом. Вы также хотите поймать в ловушку неисследованные исключения. Для этого используйте set_exception_handler.

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

4 голосов
/ 04 апреля 2009

Есть 3 типа ошибок:

  1. Системные ошибки, такие как предупреждения или фатальные ошибки, возникающие в PHP. 404 ошибки также в этой категории.

  2. Ошибки базы данных из-за неправильного или ошибочного запроса или соединения с базой данных.

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

Лучший способ создать класс ErrorHandler, который обрабатывает все три типа ошибок. Для системных ошибок вы должны использовать set_error_handler или прочитать одно из онлайн-руководств, например this .

Для базы данных я предлагаю использовать централизованный класс Database, который обрабатывает все запросы. Используйте что-то вроде этого:

$result=mysql_query($sql);
if (! $result)
{
   $ErrorHandler->dbError(mysql_error(), $sql);
}

В случае логических ошибок, таких как ошибка, связанная с отсутствием ожидаемого файла или записи в базе данных, вы вызываете тот же класс ErrorHandler и делаете что-то вроде:

if ($logicalError)
{
   $ErrorHandler->appError('Something bad happened',__LINE__, __FILE__);
   $ErrorHandler->showAppErrorPage();
}

Здесь константы __FILE__ и __LINE__ будут точно указывать место, где произошла эта ошибка. Читайте о них на сайте php.net .

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

...