我们在Zend Framework(v1)中构建了一个应用程序,并且在设置错误报告和日志记录方面没有太多工作。有没有办法在没有太多代码更改的情况下获得某种级别或错误报告?是否有可用的ErrorHandler插件?
基本要求是记录控制器内发生的错误,丢失控制器,格式错误的URL等。
我还希望能够在控制器中记录错误。将使用错误控制器here,帮助我识别和记录控制器中的错误?如何以最小的变化做到最好?
答案 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。