登录MVC(Zend Framework)

Ari*_*iod 5 php model-view-controller logging zend-framework

在将日志记录功能放在MVC应用程序中的位置是否存在最佳实践,例如Zend Framework应用程序(Zend_Log)?我应该将记录放在控制器中还是在模型中?或两者兼而有之?

如果在两者中,它们应该具有相同的记录器还是单独的记录器?

Bil*_*win 8

遵循GRASP指南中的信息专家原则,以实现面向对象的设计:

......将责任放在具有实现它所需的最多信息的课程中.

因此,您将从包含您需要记录的数据的类写入日志.如果要记录的事件与模型的工作有关,则写入模型中的日志.如果事件想要记录与控制器工作有关的事件,则写入控制器中的日志.

为应用程序创建一个日志输出.否则,您将不得不寻找许多日志文件以查找任何诊断信息!您可以在其中存储日志对象,Zend_Registry以便可以从应用程序中的任何类调用日志.


你的意见:

如果在预期的注册表项下找不到记录器,最好只是优雅地失败.优雅地失败我的意思是输出错误到stdout(到网页)或stderr(到httpd服务器日志),或抛出异常并让应用程序处理它.

至于依赖关系,这不是问题.每当一个类使用另一个类时,你就会有类似的依赖.请参阅注册表设计模式.


che*_*rtz 6

同意Bill Karwin的评论,我也会使用单个日志输出,但也可以利用基于优先级过滤错误的功能(例如,还有一个可以轻松设置的firebug记录器).

在我们的主应用程序中,我们得到了一个db-writer(在一个简单的页面后端变成了一个RSS-feed),它也被用作主日志,并通过电子邮件发送关键错误.非常方便可排序的数据并从中获取统计数据.