2

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

有没有关于如何做到这一点的通用做法、标准或规则?我希望解决方案尽可能灵活,以便可以附加一个选择的记录器,如 Monolog、Zend_Log、Analog 等......

我正在考虑编写一个执行通用 API 的接口,观察者模式(这可能是矫枉过正且过于灵活,因为我们只需要日志记录),...

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

4

2 回答 2

1

这就是外观模式,是的,一切都应该只通过接口公开。我已经实现了类似的东西,一个通用的日志接口(虽然它在 C# 中)。几乎,您定义了一个 ILog 接口,然后实现将包装真正的日志记录服务的“驱动程序”。

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

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

于 2012-06-14T12:14:38.290 回答
1

适配器模式。更具体地说,对象适配器。不同的 Logger 系统意味着不同的接口,您的应用程序应该能够与所有这些系统一起工作。看看 GOF 的“设计模式”一书中的 Pluggable Adapters。

于 2012-06-14T14:13:31.443 回答