Захват ошибок и Исключений в PHP
Сценария
я Знаю, что могу настроить журналы, ошибки и исключения, были записаны, это круто, но иногда это слишком скучно просто читать эти файлы.
Вопрос
- поймать ошибки и исключений которых можно изменять их во время выполнения?
- Какие последствия это может вызвать на производительность моего приложения?
Цель -
Существует система online взаимодействует с приложением, фиксирует ошибки и показывает их в сайт (http://bugsnag.com).
Идея состоит в том, чтобы сделать развертывание in-house
похожи.
Не отвечать указания других подобных систем. вопрос с областью, в реализации такого рода функциональности, а не на использование системы независимых производителей.
1 answers
Вы можете захватить свои исключения, так и с set_exception_handler()
:
function exceptionHandler($e) {
Notificador::logarExcecao($e);
throw $e;
}
set_exception_handler('exceptionHandler');
Таким образом, вы можете обрабатывать любое исключение не перехвачено. Для обработки ошибок, используйте set_error_handler()
, который работает таким же образом. Если вам нужна более конкретным, вы можете положить в конструкторе исключения, то так:
class LogException extends Exception {
public function __construct($message = null, $code = 0) {
parent::__construct($message, $code);
Notificador::logarExcecao($this);
}
}
Другие исключения только extenderão эта LogException
.
В методе logarExcecao($e)
вы можете определить, что будет делать при получении исключение. Помните, что вы не должны делать действия в этом методе, что они очень дорогостоящие вычислительно, так как это может ухудшить юзабилити системы. Открыть текстовый файл, писать в него, вероятно, будет быстрее, чем доступ к DB с помощью PDO
, например. В этом случае, вы можете установить обработчик, например, каждые 30 мин, отправка отчетов по электронной почте, с помощью cron jobs.
Ты сказал, что не хотел, но все же, для решения самых надежных ЖУРНАЛА, я рекомендую библиотека monolog, который может быть вставлен в проект через Composer.