Подтвердить что ты не робот

Каков наилучший способ регистрации ошибок в Zend Framework 1?

Мы создали приложение в Zend Framework (v1) и не очень много работали в настройке отчетов об ошибках и регистрации. Есть ли способ получить отчет об уровне или ошибке без чрезмерного изменения кода? Есть ли доступный плагин ErrorHandler?

Основное требование - регистрировать ошибки, которые происходят в контроллере, отсутствующие контроллеры, неверные URL и т.д.

Я также хочу иметь возможность регистрировать ошибки в моих контроллерах. Будет ли использовать контроллер ошибок здесь, помогите мне идентифицировать и регистрировать ошибки в моих контроллерах? Как лучше всего сделать это с минимальными изменениями?

4b9b3361

Ответ 1

Я бы использовал Zend_Log и использовал следующую стратегию.

Если вы используете Zend_Application в своем приложении, есть ресурс для ведения журнала. Подробнее о ресурсе здесь

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

Вы можете настроить ведение журнала в файл с помощью этого простого примера

  resources.log.stream.writerName = "Stream"
  resources.log.stream.writerParams.stream = APPLICATION_PATH "/../data/logs/application.log"
  resources.log.stream.writerParams.mode = "a"
  resources.log.stream.filterName = "Priority"
  resources.log.stream.filterParams.priority = 4

Кроме того, я бы предложил отправить критические ошибки на учетную запись электронной почты, которая регулярно проверяется вашей командой разработчиков. Компания, с которой я работаю, отправляет их по адресу [email protected] и отправляет всех разработчиков с производственных сайтов.

Из того, что я понимаю, вы не можете настроить почтовый писатель с помощью factory, поэтому ресурс не принесет вам никакой пользы, но вы, вероятно, можете настроить его в своем ErrorController или Bootstrap.

  $mail = new Zend_Mail();

  $mail->setFrom('[email protected]')
       ->addTo('[email protected]');
  $writer = new Zend_Log_Writer_Mail($mail);
  // Set subject text for use; summary of number of errors is appended to the
  // subject line before sending the message.
  $writer->setSubjectPrependText('Errors with script foo.php');

  // Only email warning level entries and higher.
  $writer->addFilter(Zend_Log::WARN);
  $log = new Zend_Log();
  $log->addWriter($writer);

  // Something bad happened!

  $log->error('unable to connect to database');

  // On writer shutdown, Zend_Mail::send() is triggered to send an email with
  // all log entries at or above the Zend_Log filter level.

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

Ответ 2

Вы можете использовать Zend_Controller_Plugin_ErrorHandler. Как вы можете видеть на странице документации, есть пример, который проверяет отсутствие контроллера/действия и показывает, как установить соответствующие заголовки.

Затем вы можете использовать Zend_Log для регистрации сообщений об ошибках на диске/db/mail.