使用 monolog Symfony 记录所有消息和仅电子邮件错误

log all messages and email only errors with monolog Symfony

我想将所有消息记录到日志文件,但仅在出现错误时才发送电子邮件,不包括 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

all messages still log to the file. what am i missing here?

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

this code means that the main handler won't be triggered only if error level is reached then it will be logged or emailed

是的,main 处理程序将收集日志,直到出现错误(404 除外),然后它将 刷新 所有内容到 grouped 处理程序依次将所有内容通过管道传递给 streameddeduplicated 处理程序