使用monolog Symfony记录所有消息并仅通过电子邮件发送错误

时间:2017-08-28 12:12:30

标签: symfony monolog

我想将所有邮件记录到日志文件中,但仅在出现404错误的情况下才发送电子邮件。 我使用这个代码工作正常,但它对我没有意义,因为这个代码意味着只有达到错误级别才会触发主处理程序然后它将被记录或通过电子邮件发送。实际上所有消息仍然记录到文件中。我在这里失踪了什么?

monolog:
handlers:
    main:
        type:         fingers_crossed
        action_level: error
        excluded_404s:
            - ^/
        handler:      grouped
    grouped:
        type:               group
        members:            [streamed, deduplicated]
    streamed:
        type:               stream
        path:               "%kernel.logs_dir%/%kernel.environment%.log"
        level:              debug
    deduplicated:
        type:               deduplication
        handler:            swift
    swift:
        type:               swift_mailer
        from_email:         %noreply_email%
        to_email:           %webmaster_email%
        subject:            'Error Notification %%message%%'
        level:              error
        formatter:          monolog.formatter.html
        content_type:       text/html
    login:
        type:               stream
        path:               "%kernel.logs_dir%/auth.log"
        level:              info
        channels:           security
    nested:
        type:  stream
        path:  "%kernel.logs_dir%/%kernel.environment%.log"
        level: debug
    console:
        type:  console

编辑:这是最终版本

monolog:
handlers:
streamed:
    type:               stream
    path:               "%kernel.logs_dir%/%kernel.environment%.log"
    level:              debug
emailed:
        type:         fingers_crossed
        action_level: error
        excluded_404s:
            - ^/
        handler:      swift
swift:
    type:               swift_mailer
    from_email:         %noreply_email%
    to_email:           %webmaster_email%
    subject:            'Error Notification %%message%%'
    level:              error
    formatter:          monolog.formatter.html
    content_type:       text/html
login:
    type:               stream
    path:               "%kernel.logs_dir%/auth.log"
    level:              info
    channels:           security
console:
    type:  console

1 个答案:

答案 0 :(得分:2)

  

所有邮件仍然会记录到该文件中。我在这里失踪了什么?

它起作用的原因是你还有 nested处理程序,其中实际上没有嵌套,这使得它(从MonologBu​​ndle的角度来看)成为一个顶级-level handler(意味着它将接收应用程序中生成的所有日志)。此外,它指向与streamed处理程序相同的文件,因此无法区分哪个处理程序响应某个已记录的消息。

  

此代码表示只有达到错误级别才会触发主处理程序,然后记录或通过电子邮件发送主处理程序

是的,main处理程序将收集日志,直到它出现错误(404s除外),然后它将刷新一切到grouped处理程序,后者又管理所有内容到streameddeduplicated处理程序