Захват ошибок и Исключений в PHP


Сценария

я Знаю, что могу настроить журналы, ошибки и исключения, были записаны, это круто, но иногда это слишком скучно просто читать эти файлы.

Вопрос

  1. поймать ошибки и исключений которых можно изменять их во время выполнения?
  2. Какие последствия это может вызвать на производительность моего приложения?

Цель -

Существует система online взаимодействует с приложением, фиксирует ошибки и показывает их в сайт (http://bugsnag.com). Идея состоит в том, чтобы сделать развертывание in-house похожи.

Не отвечать указания других подобных систем. вопрос с областью, в реализации такого рода функциональности, а не на использование системы независимых производителей.

Author: hernandev, 2014-01-28

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.
 4
Author: Calebe Oliveira, 2014-01-28 20:56:08