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

17
我们使用Zend Framework(v1)构建了一个应用程序,但在设置错误报告和日志记录方面工作不多。是否有任何方法可以在不太改变代码的情况下获得某种级别的错误报告?是否有可用的ErrorHandler插件?
基本要求是记录控制器内发生的错误,丢失的控制器,格式不正确的URL等。
我还希望能够记录我的控制器中的错误。使用错误控制器here,能帮助我识别和记录控制器内的错误吗?如何以最小的更改实现这一点?

@markus - 插件似乎已经消失了。我猜那是很久以前的事了。 - Simon East
@SimonEast 是的,我已经删除了那条评论。毕竟没有人应该再使用ZF1了... - markus
很不幸,我们有一个需要继续维护的遗留ZF1应用程序。它将有一天被重建,但目前还没有预算。@markus - Simon East
@SimonEast 我认为我的 zend-sentry 库的 zf1-legacy 分支应该可以正常工作:https://github.com/cloud-solutions/zend-sentry/tree/legacy-v1 - markus
@SimonEast 如果有需要更新的内容,请告诉我,或者更好的是,如果你将raven更新到最新版本,可以提交一个pull request。 - markus
2个回答

34
我会使用 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.

你需要对上面的示例进行一些处理,但最佳解决方案是在引导文件中获取日志资源,并将电子邮件编写程序添加到其中,而不是创建第二个日志实例。

请问您能否分享一下如何将日志记录到数据库而不是文件的示例? - undefined

1

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

然后,您可以使用Zend_Log将错误消息记录到磁盘/数据库/邮件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接