我正在构建一个PHP库,在遇到错误时抛出各种自定义异常。我需要记录这些异常并提供Logger的各种实现,以便它们可以记录在文件或数据库中。
无论是否捕获都需要记录异常,因此排除在自定义异常处理程序中实现任何此异常。因此,需要在自定义Exception类本身的构造函数中触发日志记录。
我还需要使用phpUnit进行单元测试,以便Exception触发Logger。
Exception对象有权访问Logger对象的最佳方法是什么?
我的想法/建议包括:
1)将所选的记录器实现对象(或测试Exception类时的Mock对象)注入到抛出异常的对象中,然后这些对象在抛出每个新异常时将Logger对象注入构造函数。虽然Logger对象遍布整个地方,但这可能会有点混乱。
2)使用策略或工厂模式(我已经阅读了概念,但在这种情况下我不确定如何实现这些概念)。