1

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

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

我已阅读如何将一项服务的日志写入单独的文件?并获得了一个单独的工作日志文件。

<?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 后:在登录不同文件时使用处理器我试图只将我想要的字段传递给独白行格式化程序,例如 "[%%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 文件中配置这个简单的格式化程序。

谢谢你的帮助!

4

1 回答 1

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>

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

于 2012-11-18T13:28:49.893 回答