在Zend Framework 1中记录错误的最佳方法是什么?

时间:2010-03-15 22:13:33

标签: zend-framework error-handling

我们在Zend Framework(v1)中构建了一个应用程序,并且在设置错误报告和日志记录方面没有太多工作。有没有办法在没有太多代码更改的情况下获得某种级别或错误报告?是否有可用的ErrorHandler插件?

基本要求是记录控制器内发生的错误,丢失控制器,格式错误的URL等。

我还希望能够在控制器中记录错误。将使用错误控制器here,帮助我识别和记录控制器中的错误?如何以最小的变化做到最好?

2 个答案:

答案 0 :(得分:32)

我会使用Zend_Log并使用以下策略。

如果您在应用中使用Zend_Application,则会有一个用于记录的资源。您可以阅读有关资源here

的更多信息

我的建议是在写入数据库或日志文件流之间进行选择。如果您打算使用某种类型的Web界面,请将您的日志写入数据库,如果不是平面文件就可以正常运行。

您可以使用此简单示例

设置日志记录到文件
  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 :(得分:1)

您可以使用Zend_Controller_Plugin_ErrorHandler。正如您在文档页面上看到的那样,有一个示例可以检查缺少的控制器/操作,并向您展示如何设置相应的标头。

然后,您可以使用Zend_Log将错误消息记录到disk / db / mail。