【问题标题】:Custom logger and monolog formatter in symfony2 - configure services.xmlsymfony2 中的自定义记录器和独白格式化程序 - 配置 services.xml
【发布时间】:2012-07-19 23:14:06
【问题描述】:

我已经开始学习 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 之后,我试图只将我想要的字段传递给独白行格式化程序,例如 "[%%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 文件中配置这个简单的格式化程序。

感谢您的帮助!

【问题讨论】:

    标签: logging symfony formatter monolog


    【解决方案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 源中不同格式化程序的示例。

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 2017-03-23
      • 1970-01-01
      • 2018-11-15
      • 2017-05-21
      • 2017-10-07
      • 2017-11-09
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多