将trigger_error限制为类范围

时间:2016-02-17 10:26:18

标签: php logging error-handling

我目前正在编写一个与安全相关的插件。这意味着方法和属性的可见性和可访问性更为重要。我正在使用大量的getter和setter以及权限检查来防止未经授权的访问。但是,为了让允许使用该插件的用户更多地控制,我想实现一个“安全日志”。例如,应该在访问公共方法requestDBHandler()时记录,因为它仅用于其他插件的外部访问。此外,应记录删除或移动等一些操作。这个日志记录应该只能从插件类中访问,这样就不能从外部操作或伪造它(如果可能的话,这会产生日志的意义)。

我首先想到的是一个处理日志记录的记录器类,但这意味着我必须将它作为依赖项注入到所有可能需要记录内容的子类中。即使我使用接口,这也会产生紧耦合,因为这个类的所有用户都必须知道要推送到日志的函数。

第二个想法是trigger_error(),但到目前为止,我发现无法为一个类及其所有成员设置错误处理函数。即使这样,记录的错误也没有自定义错误类型,所以我无法区分我抛出的代码错误/通知和应该用于纯日志记录的内容。此外,将trigger_error()用于非真正错误的事情会感觉不对。

您能推荐一种实现此日志记录系统的好方法吗?你会怎么做?我知道这有点被广泛询问并给讨论留出了空间,但我也相信这个问题有一个清晰而正确的最佳实践答案。

1 个答案:

答案 0 :(得分:1)

我最重要的建议是注入标准PSR-3 LoggerInterface

如果您的孩子班级要记录任何内容,那么我认为他们应该通过(注入?)PSR-3 LoggerInterface实例来做这件事并不合理。

如果您的子课程使用标准PSR-3 LoggerInterface和您的"容器"给他们你特定的PSR-3 LoggerInterface实现,然后我猜它不是紧耦合。