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

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

21.08.2008 15:54:14
7 ОТВЕТОВ
РЕШЕНИЕ

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

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

5
27.08.2011 03:06:58
log4php имеет отличную функциональность, но для меня это работало очень медленно!
Dawid Ohia 10.01.2011 09:50:00
Сейчас его нет в инкубаторе, и URL-адрес изменился на logging.apache.org/log4php
Mike 24.08.2011 20:47:44

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

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

Цитируется из error_log

  1. Системный регистратор PHP, использующий механизм регистрации операционной системы или файл, в зависимости от того, на что установлена ​​директива конфигурации error_log. Это опция по умолчанию.
  2. Отправляется по электронной почте на адрес в параметре адресата. Это единственный тип сообщения, в котором используется четвертый параметр extra_headers.
  3. Добавляется к месту назначения файла. Новая строка автоматически не добавляется в конец строки сообщения.

Редактировать: у markdown есть нопарсный тег для подчеркивания?

11
24.08.2008 23:55:40

Просто записать их в файл не будет полезно, не так ли?

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

3
21.08.2008 16:06:44

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

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

0
21.08.2008 16:09:43

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

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

1
15.09.2008 16:30:36

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

0
15.09.2008 22:43:09

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

0
18.11.2009 01:26:02
+1 за предложение добавить в уже существующую монополию Google на ваши важные данные.
Harley Watson 18.11.2009 01:42:04