我已经开始学习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文件中配置这个简单的格式化程序。
感谢您的帮助!
答案 0 :(得分:1)
您需要创建格式化程序并从FormatterInterface
扩展它并实施format
和formatBatch
。
然后添加服务定义
<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 源中不同格式化程序的示例。