【问题标题】:Symfony2/Monolog: Log Level - only show app.INFO?Symfony2/Monolog:日志级别 - 仅显示 app.INFO?
【发布时间】:2012-04-17 23:54:10
【问题描述】:

我正在使用 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?

迈克

【问题讨论】:

    标签: symfony monolog


    【解决方案1】:

    您必须创建一个新的记录器服务,该服务应该在您的课程中使用。像这样,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

    【讨论】:

    • 如果你想升级'my_logger'处理程序怎么办?即,假设您在控制器中设置了所有不同级别的消息。使用若干 info、alert、err 方法。您如何在特定时刻告诉配置只是在日志中写入具有警告或更高相关性(警报或错误)的日志,而不是写入信息和警告?有机会这样做吗?
    • 不确定我是否正确理解了这个问题,但我会尽力回答。您必须将处理程序中的参数(现在是 100)更改为另一个数字(例如,“200”以减少日志记录)。检查Monolog\Monolog 中的实际值。这样做你的代码会像往常一样调用 info/debug/error 方法,但只会记录值为 200 或更高的那些。
    • 您完全理解了我的问题,并且实际上解决了我的问题。老实说,我不知道那个参数是干什么用的。丢人现眼。非常感谢
    【解决方案2】:

    使用 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 的这个新功能。

    【讨论】:

    • monolog.logger.my_logger - 应该是 monolog.logger.my_channel 吗?
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      此日志消息来自 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 在其构造函数参数中没有记录器服务)。

      【讨论】:

      • 这其实很酷。当我再次遇到同样的问题时,我只是查看了我的旧帖子。 ;) 非常感谢!
      【解决方案5】:

      在您的 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)

      【讨论】:

        【解决方案6】:

        添加你的独白配置 例如,如果我使用 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-21
          • 2014-07-03
          • 2015-10-07
          • 1970-01-01
          • 2013-12-06
          • 1970-01-01
          • 2014-07-03
          • 1970-01-01
          相关资源
          最近更新 更多