symfony2命令中的自定义monolog日志记录通道

Reu*_*ven 15 php symfony

在这本食谱文章中,我们可以看到如何在服务中使用自定义渠道.但是如何在命令中使用自定义登录通道?

我创建了一个symfony2命令来执行某些操作.我想使用monolog记录我的命令完成的事情.

实际上,我想在另一个文件中为我的命令编写日志而不是应用程序的日志.

Ven*_*tra 6

任何扩展的自定义命令ContainerAwareCommand都可以访问Symfony的服务容器.您可以定义在配置中登录自定义渠道的服务.

<services>
    <service id="console.logger" parent="monolog.logger_prototype">
        <argument index="0">mychannel</argument>
    </service>
</services>
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式从命令访问您的服务

$logger = $this->getContainer()->get('console.logger');
Run Code Online (Sandbox Code Playgroud)

此记录器将使用频道记录为"mychannel".

FYI默认记录器服务记录到频道"app".这可以在文件中看到 Symfony/Bundle/MonologBundle/Resources/config/monolog.xml.这也是logger定义默认服务的位置.

<services>
    <service id="monolog.logger" parent="monolog.logger_prototype" public="false">
        <argument index="0">app</argument>
    </service>

    <service id="logger" alias="monolog.logger" />

    <service id="monolog.logger_prototype" class="%monolog.logger.class%" abstract="true">
        <argument /><!-- Channel -->
    </service>
</services>
Run Code Online (Sandbox Code Playgroud)


Reu*_*ven 4

在这里提出并回答了类似的问题:

如何将一项服务的日志写入单独的文件?

谢谢