如何在库中提供日志记录API

时间:2012-06-14 11:36:05

标签: php design-patterns logging standards

我编写了一个PHP5.3库,通过SNMP与我们的几个设备进行通信。我想要做的下一部分是允许将要实现它的公司部门将Logger附加到类中以简化调试,错误处理等。

有关于如何做到这一点的常见做法,标准或规则吗?我希望解决方案尽可能灵活,这样就可以选择Monolog,Zend_Log,Analog等选择的Logger ......

我正在考虑编写一个强制执行通用API的接口的方向,观察者模式(由于我们只需要记录,因此可能过度且过于灵活),...

TL;博士
是否有任何规则或模式,最好是如何在库中实现API的示例,该库抽象日志并将其委托给实现者选择的记录器系统。

2 个答案:

答案 0 :(得分:1)

那是Facade模式,是的,一切都应该只通过界面公开。我已经实现了类似的东西,一个常见的日志记录界面(虽然它在C#中)。实际上,您定义了ILog接口,然后实现了“驱动程序”,它将包装真实的日志记录服务。

消费者只需要一个记录器(LogerFactory :: GetLog()),我认为记录器可以是一个单例,因此工厂将始终返回相同的实例。

如果您想一次使用不同的日志服务(一个用于保存到文件,另一个用于保存到db),那么Observer和Chain of Responsiblities在这里工作得很好。但这一切都取决于功能。至少你只有ILog接口及其具体实现。

答案 1 :(得分:1)

Adapter Pattern。更具体地说是Object适配器不同的Logger系统意味着不同的接口,您的应用程序应该能够使用所有这些系统。请参阅GOF的“设计模式”一书中的可插拔适配器。