我最近阅读了PSR-3
,并有兴趣了解跨web应用程序或网站实现日志记录器的最佳方法。我了解如何定义日志记录器以及如何在PSR-3中实现它们,但是如何跨应用程序访问/引用它们以满足各种日志记录需求,例如捕获的异常、值得注意的事件等?
我想到了这三个选项。还有吗?哪个是最好的方法?
- 全局对象-
$logger->debug('foo')
- 全局静态实例-
Logger::debug('foo')
- 通过某种方法-
$app->getLogger()->debug('foo')
- …等…
我的考虑之一是尽量减少引用日志记录器所需的代码。例如,上面的选项3在整个应用程序中为每个适当捕获的异常、值得注意的事件等检索记录器似乎会变得相当乏味。
我更倾向于通过依赖注入来获取logger,或者您的第三种选择。
DI::getInstance()->get('logger')
很容易将默认的记录器替换为单元测试的虚拟记录器,或者在生产环境中替换为高性能记录器。