自定义记录器通道在symfony 2.7中无法在生产中打印

时间:2017-01-23 19:35:51

标签: symfony logging

我正在尝试在制作中打印自定义频道。它在开发环境中运行良好。我希望它始终记录,而不仅仅是出错。

以下是我的生产配置:

monolog:
channels: ["always"]
handlers:
    main:
        type:         fingers_crossed
        action_level: error
        handler:      nested
        channels: ["!always"]
    nested:
        type:  stream
        path:  "%kernel.logs_dir%/%kernel.environment%.log"
        level: debug
    console:
        type:  console
    always:
        type: stream
        path:   "%kernel.logs_dir%/%kernel.environment%.log"
        level:  debug
        channels: ['always']

这是我的开发配置:

monolog:
channels: ["always"]
handlers:
    main:
        type:   stream
        path:   "%kernel.logs_dir%/%kernel.environment%.log"
        level:  debug
        channels: ["!always"]
    console:
        type:   console
        bubble: false
        verbosity_levels:
            VERBOSITY_VERBOSE: INFO
            VERBOSITY_VERY_VERBOSE: DEBUG
        channels: ["!doctrine"]
    console_very_verbose:
        type:   console
        bubble: false
        verbosity_levels:
            VERBOSITY_VERBOSE: NOTICE
            VERBOSITY_VERY_VERBOSE: NOTICE
            VERBOSITY_DEBUG: DEBUG
        channels: ["doctrine"]
    always:
        type: stream
        path:   "%kernel.logs_dir%/%kernel.environment%.log"
        level:  debug
        channels: always

这是日志中的一个例子:

[2017-01-23 14:17:39] always.INFO: STAR REMOTE CONTROL FROM DEFAULT CONTROLLER [] []

以下是我的称呼方式:

  /**
   * @param Request $request
   * @return Response
   * @throws \Exception
   * @Route("/star-remote-control")
   *
   */
  public function starRemoteControlAction(Request $request)
  {
    $this->container->get('monolog.logger.always')->info('STAR REMOTE CONTROL FROM DEFAULT CONTROLLER');
    ...

你能帮我解决为什么它没有出现在prod.log中吗?

2 个答案:

答案 0 :(得分:0)

查看official documentation about the fingers_crossed handler

  

它在请求期间存储所有日志消息,但只有在其中一条消息到达action_level时才将它们传递给第二个处理程序。

prod 环境中的操作级别错误,但您实际上是在记录信息消息。尝试更改操作级别或日志以及错误严重消息,该条目应显示在 prod 日志文件中。

答案 1 :(得分:0)

所以我的问题的答案实际上是关于处理程序的顺序。我所要做的就是移动" Always"在" fingers_crossed"之前处理器到顶部处理程序和日志的编写完全符合我的要求。

这是config_prod.yml

monolog:
channels: ["always"]
handlers:
    always:
        type: stream
        path:   "%kernel.logs_dir%/%kernel.environment%.log"
        level:  debug
        channels: ["always"]
    main:
        type:         fingers_crossed
        action_level: error
        handler:      nested
        channels: ["!always"]
    nested:
        type:  stream
        path:  "%kernel.logs_dir%/%kernel.environment%.log"
        level: debug
    console:
        type:  console