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

Mik*_*ike 7 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
Run Code Online (Sandbox Code Playgroud)

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

    $logger = $this->get('logger'); // Log
    $logger->info('somelogcontent');
Run Code Online (Sandbox Code Playgroud)

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

[2012-04-04 11:13:17] request.INFO: Matched route ... blablabla
[2012-04-04 11:13:17] app.INFO: somelogcontent
...
Run Code Online (Sandbox Code Playgroud)

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

麦克风

Ant*_*nko 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]
Run Code Online (Sandbox Code Playgroud)

用法(Controller例如):

$this->get('my_logger')->info('info message');
Run Code Online (Sandbox Code Playgroud)

symfony cookbook中的更多详细信息.

  • 不确定我是否正确理解了这个问题,但我会尽力回答.你必须将处理程序中的参数(现在是'100`)更改为另一个数字(例如,'200'以记录更少).检查`Monolog\Monolog`中的实际值.这样做你的代码会照常调用info/debug/error方法,但只会记录值为200或更高的thoso. (3认同)

Emi*_*aos 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
Run Code Online (Sandbox Code Playgroud)

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

$logger = $this->get('monolog.logger.my_channel');
$logger->info('somelogcontent');
Run Code Online (Sandbox Code Playgroud)

我知道老问题,但MonologBundle ~2.4应该提到这个新功能.