Symfony2:在自己的文件中记录1.拥有频道2.(在开发中)

时间:2013-04-03 06:53:32

标签: logging symfony channel monolog

对不起这个主题,但是我真的想不通,如何配置Symfony2做我喜欢的事情:-) 我只是没有得到“全局”。

我想为我的捆绑包创建一个自己的日志通道。通常应该将此通道写入dev中的自己的文件,因为它应该写入prod.log或被抑制(其中一个或可通过配置切换)。

我感觉这个解决方案是通过许多文档和教程共享的。

  1. 我在哪里以及如何定义该频道?
  2. 处理程序在config.yml中定义,对吧?
  3. 我是否必须实现自己的处理程序类?
  4. 对于这个非常不明确的问题感到抱歉。

    加成-问题: 4.当在控制器之外进行记录(访问容器)时,我必须实现服务,对吗?

2 个答案:

答案 0 :(得分:2)

行。我的错是混乱的误解和菜鸟。阅读Service-Doc并将此线程与(How to write logs from one service into separate file?)进行比较后,我得到了它的工作:

我喜欢这个,因为它只是配置给定的类而不是实现它自己的:

config.yml:

services:
    myOwnLogger:
        class:     Symfony\Bridge\Monolog\Logger
        arguments: [pushHandler, [@myOwnLogHandler]]

    myOwnLogHandler:
        class:     Monolog\Handler\StreamHandler
        arguments: [%kernel.logs_dir%/%kernel.environment%.myOwnChannel.log, 200] #200 = INFO

Egads,这很容易,请原谅我不理解'其他'主题。

答案 1 :(得分:1)

您可以看到Switching a channel to a different handler了解如何配置它以记录到不同的日志文件(如果您只想在开发中使用它,请在config_dev.yml中)。

要创建新频道(默认情况下,记录器服务使用app频道),您需要将其注入服务using the monolog.logger tag。无论何时将日志发送到该记录器实例,它都将转到为此通道配置的处理程序。

服务定义中的@logger将替换为您需要的频道的正确记录器实例。如果您不添加自定义标记,则@logger保持不变,您将获得默认(app)频道。