symfony2中的自定义记录器和monolog格式化程序 - 配置services.xml

时间:2012-07-20 16:26:18

标签: logging symfony formatter monolog

我已经开始学习Symfony2,目前我正在处理一个我想单独记录的命令。

我的目标是使用自定义记录器并为我的命令获取干净的日志文件。 我正在开发一个使用xml配置文件的项目,但我不知道如何翻译一些.yml参数和选项。

我已阅读How to write logs from one service into separate file?并获得了一个独立的日志文件。

<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="myproject_mycommand.logger" class="Symfony\Bridge\Monolog\Logger">
            <argument>myproject_mycommand.logger</argument>
            <call method="pushHandler">
                <argument type="service" id="myproject_mycommand.logger_handler" />
            </call>
        </service>

        <service id="myproject_mycommand.logger_handler" class="Monolog\Handler\StreamHandler">
            <argument>%kernel.logs_dir%/my_custom_file_log.log</argument>
        </service>
    </services>
</container>

在查看Symfony2 : use Processors while logging in different files后,我试图将我想要的字段传递给monolog行格式化程序,例如“[%% datetime %%] %% message %% \ n”

我想我必须添加类似的内容:

container
...
    xmlns:monolog="http://symfony.com/schema/dic/monolog"
... 

<service id="myproject_mycommand.logger.formatter" class="Monolog\Formatter\LineFormatter">
    <argument>"[%%datetime%%] %%message%%\n"</argument>
</service>

但我不知道如何在xml文件中配置这个简单的格式化程序。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要创建格式化程序并从FormatterInterface扩展它并实施formatformatBatch

然后添加服务定义

<service id="myproject_mycommand.logger.formatter" class="MyBundle\Formatter\XmlFormatter">
    <argument>some arguments if you need one</argument>
</service>

<service id="myproject_mycommand.logger_handler" class="Monolog\Handler\StreamHandler">
    <argument>%kernel.logs_dir%/my_custom_file_log.log</argument>
    <call method="setFormatter">
        <argument type="service" id="myproject_mycommand.logger.formatter"/>
    </call>    
</service>

就是这样。有关如何格式化的想法,您可以查看 monolog bundle 源中不同格式化程序的示例。