Каков наилучший способ регистрировать ошибки в Zend Framework 1? - PullRequest
16 голосов
/ 16 марта 2010

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

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

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

Ответы [ 2 ]

32 голосов
/ 16 марта 2010

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

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

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

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

  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

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

Насколько я понимаю, вы не можете настроить программу записи почты через фабрику, поэтому ресурс не принесет вам пользы, но вы, вероятно, можете настроить его в ErrorController или Bootstrap.

  $mail = new Zend_Mail();

  $mail->setFrom('errors@example.org')
       ->addTo('project_developers@example.org');
  $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.

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

1 голос
/ 17 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...