Как мне регистрировать неперехваченные исключения в PHP?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
11
0
6 359
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

Quoted from error_log

  1. PHP's system logger, using the Operating System's system logging mechanism or a file, depending on what the error_log configuration directive is set to. This is the default option.
  2. Sent by email to the address in the destination parameter. This is the only message type where the fourth parameter, extra_headers is used.
  3. Appended to the file destination . A newline is not automatically added to the end of the message string.

Обновлено: есть ли у markdown тег noparse для подчеркивания?

Ответ принят как подходящий

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

Что касается сбоев системы, вы можете регистрировать ошибку в нескольких местах назначения (например, иметь приложения, чей порог КРИТИЧЕСКИЙ или ОШИБКА, которые вступают в игру только тогда, когда что-то идет не так). Я не уверен, насколько безотказны существующие аппендеры - если база данных не работает, как это приложение выходит из строя? - но вы можете легко написать свой собственный аппендер, который корректно завершится с ошибкой, если он не сможет войти в систему.

log4php имеет отличную функциональность, но для меня он работал очень медленно!

Dawid Ohia 10.01.2011 12:50

Сейчас его нет в инкубаторе, и его URL-адрес изменился на logging.apache.org/log4php.

Mike 25.08.2011 00:47

Simply writing them to a file won't be useful, will it?

Но, конечно, это - прекрасное занятие, намного лучше, чем отображение их на экране. Вы хотите показать пользователю красивый экран, на котором написано: «Извините, мы дурачились. Инженеры были уведомлены. Вернитесь и попробуйте еще раз» и АБСОЛЮТНО БЕЗ ТЕХНИЧЕСКИХ ДЕТАЛЕЙ, потому что это может быть опасно для безопасности. Вы можете отправить электронное письмо в общий почтовый ящик и записать исключение в файл или базу данных для последующего просмотра. Это была бы лучшая практика.

Я думаю, это во многом зависит от того, где произошла ваша ошибка. Если БД не работает, запись в БД - плохая идея;)

Я использую функцию системный журнал () для регистрации ошибки, но у меня нет проблем с записью ее в файл, когда я нахожусь в системе, которая не имеет поддержки syslog. Вы можете легко настроить свою систему для отправки вам электронного письма или jabber-сообщения, используя, например, журнал или стандартный syslogd.

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

Если вы знаете, что это разовая ошибка, то можно отправить уведомление по электронной почте. Однако при большом количестве посещений веб-сайта в минуту не отправляйте уведомление Когда-либо по электронной почте. Я видел, как веб-сайт обрушился из-за того, что в минуту генерировались сотни электронных писем, в которых говорилось, что система не может подключиться к базе данных. Тот факт, что он также имел LoadAvg> 200 из-за того, что почтовый сервер запускался для каждого нового сообщения, совсем не помог. В этом случае - лучшим сценарием, безусловно, был случай, когда сторожевой таймер проверяет размер файлов и подключается к внешней службе для отправки SMS (возможно, мгновенного обмена сообщениями), либо внешняя система просматривает веб-страницу в поисках сообщения об ошибке (которое не обязательно должно быть видно на экране - это может быть в HTML-комментарии).

Я второй log4php. Обычно я настраиваю его на отправку таких вещей, как исключения в ERROR или CRITITCAL, и их запись в системный журнал. Оттуда у вас может быть канал системного журнала в Зенос, Nagios, Splunk или что-нибудь еще, с чем syslog может общаться.

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

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

Harley Watson 18.11.2009 04:42

Другие вопросы по теме