" @ logger"服务来自Symfony应用程序?

时间:2014-07-29 10:51:29

标签: php symfony logging service

我的app/config/services.yml

services:
  FooService:
    class: path/to/FooService.php
    arguments: [..., "@logger"]

我的FooService.php

class FooService
{
    public function __construct(..., $logger) {
        // $logger here satisfies \Psr\Log\LoggerInterface
    }
    ...
}

我不明白实际LoggerInterface参数传入的$logger实例来自。 Symfony文档说(替换我的示例名称):

  

在YAML中,特殊的@logger语法告诉容器查找名为logger的服务并将该对象传递给FooService的构造函数。但是,在这种情况下,必须存在指定的服务logger。如果没有,则会抛出异常。

显然logger服务确实存在,因为没有抛出异常,我得到一个对象作为$logger参数。但是它来自哪里?在文档和我的应用程序中的所有示例中,此语法似乎引用services.yml中定义的另一个服务。必须在其他地方定义服务,但文档并没有说明在哪里。有线索吗?

1 个答案:

答案 0 :(得分:0)

供应商/ symfony的/独白束/的Symfony /捆绑/ MonologBu​​ndle /资源/配置/ monolog.xml

请注意,logger实际上是monolog.logger的别名。您可以编写自己的记录器捆绑包作为monolog捆绑包的替代。

跟踪这些事情的一种方法是搜索参数集合的DependencyInjection \ Configuration.php文件,例如“monolog”。