在PHP中跨应用程序/网站访问记录器的最佳方式


Best way to access a logger across an application/website in PHP

我最近阅读了PSR-3,并有兴趣了解跨web应用程序或网站实现日志记录器的最佳方法。我了解如何定义日志记录器以及如何在PSR-3中实现它们,但是如何跨应用程序访问/引用它们以满足各种日志记录需求,例如捕获的异常、值得注意的事件等?

我想到了这三个选项。还有吗?哪个是最好的方法?

  1. 全局对象- $logger->debug('foo')
  2. 全局静态实例- Logger::debug('foo')
  3. 通过某种方法- $app->getLogger()->debug('foo')
  4. …等…

我的考虑之一是尽量减少引用日志记录器所需的代码。例如,上面的选项3在整个应用程序中为每个适当捕获的异常、值得注意的事件等检索记录器似乎会变得相当乏味。

我更倾向于通过依赖注入来获取logger,或者您的第三种选择。

DI::getInstance()->get('logger')

很容易将默认的记录器替换为单元测试的虚拟记录器,或者在生产环境中替换为高性能记录器。