Symfony2 / Monolog:日志级别 - 只显示app.INFO?

时间:2012-04-04 09:21:25

标签: symfony monolog

我使用Symfony2和monolog在定义的日志文件(mylogfile.log)中写入特定日志:

#config_dev.yml
monolog:
    handlers:
        main:
           type:  stream
           path:  %kernel.logs_dir%/%kernel.environment%.log
           level: debug
       file:
           type:   stream
           path:   %kernel.logs_dir%/mylogfile.log
           level:  info

我通过以下方式访问控制器中的日志文件:

    $logger = $this->get('logger'); // Log
    $logger->info('somelogcontent');

现在我的问题是我的日志文件包含整个信息级别,这意味着它给了我所有app.INFO日志(这是我想要的)和request.INFO(我真的不需要):< / p>

[2012-04-04 11:13:17] request.INFO: Matched route ... blablabla
[2012-04-04 11:13:17] app.INFO: somelogcontent
...

有没有办法不记录Request.INFO?

麦克

6 个答案:

答案 0 :(得分:10)

您必须创建一个新的记录器服务,应该在您的类中使用它。像这样,config.yml:

services:
  my_logger:
    class: Monolog\Logger
    arguments: [my_info]
    calls:
        - [pushHandler, [@my_log_handler]]

  my_log_handler:
    class: Monolog\Handler\StreamHandler
    arguments: [%kernel.root_dir%/logs/my_info.log, 100]

用法(例如Controller中):

$this->get('my_logger')->info('info message');

symfony cookbook中的更详细信息。

答案 1 :(得分:6)

对于MonologBu​​ndle版本2.4及更高版本(注意,MonologBu​​ndle的发布周期不再与symfony同步),您现在可以通过配置非常简单地定义新通道,而无需定义服务。

monolog:
    channels: ["my_channel"]
    handlers:
       file:
           type:   stream
           path:   %kernel.logs_dir%/mylogfile.log
           level:  info
           channels: my_channel

现在只需在控制器中获取自动创建的新频道记录器:

$logger = $this->get('monolog.logger.my_channel');
$logger->info('somelogcontent');

我知道旧问题,但应提及MonologBundle ~2.4中的这一新功能。

答案 2 :(得分:2)

此日志消息来自 router_listener 服务。您可以在服务配置文件中重新定义它。

我在主捆绑包config / services.yml中做了什么:

services:

    # ...

    router_listener:
        class:  %router_listener.class%
        arguments: ['@router', %request_listener.http_port%, %request_listener.https_port%]
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onEarlyKernelRequest }
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

它使“匹配路由...”日志消息不被记录(因为RouterListener在其构造函数参数中没有记录器服务)。

答案 3 :(得分:1)

您可以提供用户警报级别。        文件:            类型:流            path:%kernel.logs_dir%/ mylogfile.log            级别:警报

$logger = $this->get('logger'); // Log
$logger->alert('somelogcontent');

答案 4 :(得分:0)

在您的config \ packages \ monolog.yaml文件中添加“ app”专用频道

monolog:
    handlers:
        info:
            type:  rotating_file
            path:  '%kernel.logs_dir%/info_%kernel.environment%_info.log'
            level: info
            max_files: 10
            channels: app

我使用symfony 4(或5)

答案 5 :(得分:0)

添加您的monolog配置 例如,如果我使用handler:test

test:
    type: filter
    accepted_levels: [info]
    handler: test_info
test_info:
    type: stream // many possibilities(rotating_file..)
    level: info
    path: // the path where you save file log