【问题标题】:What is the best way to log errors in Zend Framework 1?在 Zend Framework 1 中记录错误的最佳方法是什么?
【发布时间】:2010-03-15 22:13:33
【问题描述】:

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

基本要求是记录控制器内发生的错误、缺少控制器、格式错误的 URL 等。

我还希望能够在我的控制器中记录错误。使用错误控制器here 会帮助我识别和记录控制器中的错误吗?如何以最少的更改最好地做到这一点?

【问题讨论】:

  • @markus - 插件似乎消失了。我想那是很久以前的事了。
  • @SimonEast 是的,我删除了评论。无论如何,没有人应该再与 ZF1 合作......
  • 不幸的是,我们有一个遗留的 ZF1 应用程序仍然需要维护。总有一天会重建,但还没有预算。 @markus
  • @SimonEast 我认为我的 zend-sentry 库的 zf1-legacy 分支应该可以正常工作:github.com/cloud-solutions/zend-sentry/tree/legacy-v1
  • @SimonEast 让我知道是否有任何需要更新或更好的东西,如果您提交请求请求,例如更新到最新的 raven 版本。

标签: zend-framework error-handling


【解决方案1】:

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

您需要对上述示例做一些工作,但最佳解决方案是获取引导文件中的日志资源,并将电子邮件编写器添加到其中,而不是创建第二个日志实例。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-18
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 2011-04-25
      • 2011-07-29
      • 2018-11-10
      相关资源
      最近更新 更多