7

我正在使用 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(我真的不需要):

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

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

麦克风

4

6 回答 6

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 食谱中的更多详细信息。

于 2012-04-04T11:57:25.877 回答
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我知道老问题,但应该提到这个新功能。

于 2013-11-06T19:03:10.447 回答
2

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

$logger = $this->get('logger'); // Log
$logger->alert('somelogcontent');
于 2012-04-04T11:27:25.897 回答
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 在其构造函数参数中没有记录器服务)。

于 2012-04-04T13:03:13.290 回答
0

添加你的独白配置,例如如果我使用 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
于 2020-03-18T15:37:34.980 回答
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)

于 2020-02-16T08:09:35.103 回答