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

StackOverflow https://stackoverflow.com/questions/20322

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Цитата: журнал ошибок

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

Редактировать:Есть ли в уценке тег noparse для подчеркивания?

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top