0

我正在构建一个 PHP 库,该库在遇到错误时会引发各种自定义异常。我需要记录这些异常并提供 Logger 的各种实现,以便它们可以记录在文件或数据库中。

无论是否捕获异常,都需要记录这些异常,这样就排除了在自定义异常处理程序中实现任何这些。因此,需要在自定义异常类本身的构造函数中触发日志记录。

我还需要使用 phpUnit 对异常触发 Logger 进行单元测试。

Exception 对象访问 Logger 对象的最佳方式是什么?

我的想法/建议包括:

1)将选择的logger实现对象(或者在测试Exception类时为Mock对象)注入到抛出异常的对象中,然后这些对象在抛出每个新的异常时将Logger对象注入到构造函数中。尽管 Logger 对象在各处传递,这可能会有点混乱。

2)使用策略或工厂模式(我已经阅读了这些概念,但我不确定在这种情况下如何实现这些)。

4

1 回答 1

1

那将是

我认为使用记录器而不是使用异常处理程序的异常方法是有缺陷的。IMO,它违反了关注点和异常的分离,不应包含日志记录逻辑。但是,如果您必须拥有它,您可以创建一个自定义异常,该异常将记录器组合作为静态成员,但这仍然会使您无法记录所有未从该异常子类化的异常。您可以使用runkit更改 PHP 的基本异常的行为,但那是肮脏的黑色巫毒魔法猴子补丁。

于 2010-10-27T09:21:07.713 回答