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






Вы можете использовать set_error_handler, чтобы установить собственное исключение для регистрации ваших ошибок. Я бы лично подумал о том, чтобы сохранить их в базе данных, поскольку обратная трассировка обработчика исключений по умолчанию может предоставить информацию о том, что его вызвало - это, конечно, будет невозможно, если обработчик базы данных вызвал исключение.
Вы также можете использовать журнал ошибок для регистрации ошибок. У него есть выбор адресатов сообщений, в том числе:
Quoted from error_log
- 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.
- Sent by email to the address in the destination parameter. This is the only message type where the fourth parameter, extra_headers is used.
- Appended to the file destination . A newline is not automatically added to the end of the message string.
Обновлено: есть ли у markdown тег noparse для подчеркивания?
Мне очень нравится log4php для ведения журнала, хотя он еще не вышел из инкубатора. Я использую log4net практически во всем и считаю этот стиль вполне естественным для меня.
Что касается сбоев системы, вы можете регистрировать ошибку в нескольких местах назначения (например, иметь приложения, чей порог КРИТИЧЕСКИЙ или ОШИБКА, которые вступают в игру только тогда, когда что-то идет не так). Я не уверен, насколько безотказны существующие аппендеры - если база данных не работает, как это приложение выходит из строя? - но вы можете легко написать свой собственный аппендер, который корректно завершится с ошибкой, если он не сможет войти в систему.
Сейчас его нет в инкубаторе, и его URL-адрес изменился на logging.apache.org/log4php.
Simply writing them to a file won't be useful, will it?
Но, конечно, это - прекрасное занятие, намного лучше, чем отображение их на экране. Вы хотите показать пользователю красивый экран, на котором написано: «Извините, мы дурачились. Инженеры были уведомлены. Вернитесь и попробуйте еще раз» и АБСОЛЮТНО БЕЗ ТЕХНИЧЕСКИХ ДЕТАЛЕЙ, потому что это может быть опасно для безопасности. Вы можете отправить электронное письмо в общий почтовый ящик и записать исключение в файл или базу данных для последующего просмотра. Это была бы лучшая практика.
Я думаю, это во многом зависит от того, где произошла ваша ошибка. Если БД не работает, запись в БД - плохая идея;)
Я использую функцию системный журнал () для регистрации ошибки, но у меня нет проблем с записью ее в файл, когда я нахожусь в системе, которая не имеет поддержки syslog. Вы можете легко настроить свою систему для отправки вам электронного письма или jabber-сообщения, используя, например, журнал или стандартный syslogd.
Я записывал их в файл и, возможно, настраивал систему мониторинга, чтобы проверять наличие изменений в размере файла или дате последнего изменения. Webmin - один из простых способов, но есть и более полные программные решения.
Если вы знаете, что это разовая ошибка, то можно отправить уведомление по электронной почте. Однако при большом количестве посещений веб-сайта в минуту не отправляйте уведомление Когда-либо по электронной почте. Я видел, как веб-сайт обрушился из-за того, что в минуту генерировались сотни электронных писем, в которых говорилось, что система не может подключиться к базе данных. Тот факт, что он также имел LoadAvg> 200 из-за того, что почтовый сервер запускался для каждого нового сообщения, совсем не помог. В этом случае - лучшим сценарием, безусловно, был случай, когда сторожевой таймер проверяет размер файлов и подключается к внешней службе для отправки SMS (возможно, мгновенного обмена сообщениями), либо внешняя система просматривает веб-страницу в поисках сообщения об ошибке (которое не обязательно должно быть видно на экране - это может быть в HTML-комментарии).
Вы также можете перехватывать и записывать исключения PHP с помощью Google Forms. Есть учебник здесь, который объясняет этот процесс.
+1 за предложение добавить к уже существующей монополии Google на ваши важные данные.
log4php имеет отличную функциональность, но для меня он работал очень медленно!