【问题标题】:Symfony2 + Monolog: Different actions for different error levelsSymfony2 + Monolog:针对不同错误级别的不同操作
【发布时间】:2012-11-08 20:05:30
【问题描述】:

我已经为我们的 Symfony2 项目设置了 Monolog,以便在发生严重错误时将其通过电子邮件发送给我们。

不过,我也想记录非严重错误,并将这些错误通过电子邮件发送给不同的收件人。我很难在文档中看到这一点,但它看起来应该是可能的。我已经设置了如下配置:

parameters:
    error_mail_sender: error@mysite.com
    error_mail_recipients: [siteerrors@mysite.com]
    critical_error_mail_recipients: [siteerrors@mysite.com, developer@developers.com]

monolog:
    handlers:
        main_critical:
            type:         fingers_crossed
            action_level: critical
            handler:      grouped_critical
            bubble:       false
        main_error:
            type:         fingers_crossed
            action_level: error
            handler:      grouped_error
        grouped_critical:
            type:    group
            members: [streamed, buffered_critical]
        grouped_error:
            type:    group
            members: [streamed, buffered_error]
        streamed:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
        buffered_critical:
            type:    buffer
            handler: swift_critical
        buffered_error:
            type:    buffer
            handler: swift_error
        swift_critical:
            type:       swift_mailer
            from_email: %error_mail_sender%
            to_email:   %error_mail_recipients%
            subject:    Critical error occurred!
            level:      debug
        swift_error:
            type:       swift_mailer
            from_email: %error_mail_sender%
            to_email:   %critical_error_mail_recipients%
            subject:    Non-critical error occurred
            level:      debug

通过这种设置,我们会收到严重错误,但不会收到非严重错误。

此设置大致基于此问题的(未接受的)答案:How to include the severity of a log in the e-mail subject?。 (如果答案对我有用,我会投票赞成!!)

谁能看出这有什么问题?

谢谢!

【问题讨论】:

    标签: symfony monolog


    【解决方案1】:

    问题似乎是气泡:第一个处理程序中的 false,这意味着它将停止向其他处理程序传播消息。

    另外注意,我会从 grouped_critical 中删除组和流处理程序,因为它已经收到来自 grouped_error 的错误,从而导致日志文件中出现重复条目​​。

    所以这应该有效:

    parameters:
        error_mail_sender: error@mysite.com
        error_mail_recipients: [siteerrors@mysite.com]
        critical_error_mail_recipients: [developer@developers.com]
    
    monolog:
        handlers:
            main_critical:
                type:         fingers_crossed
                action_level: critical
                handler:      buffered_critical
            buffered_critical:
                type:    buffer
                handler: swift_critical
            swift_critical:
                type:       swift_mailer
                from_email: %error_mail_sender%
                to_email:   %error_mail_recipients%
                subject:    Critical error occurred!
                level:      debug
    
            main_error:
                type:         fingers_crossed
                action_level: error
                handler:      grouped_error
            grouped_error:
                type:    group
                members: [streamed, buffered_error]
            streamed:
                type:  stream
                path:  "%kernel.logs_dir%/%kernel.environment%.log"
                level: debug
            buffered_error:
                type:    buffer
                handler: swift_error
            swift_error:
                type:       swift_mailer
                from_email: %error_mail_sender%
                to_email:   %critical_error_mail_recipients%
                subject:    Non-critical error occurred
                level:      debug
    

    我对它们进行了重新排序,以便更容易看到两个处理程序链。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2014-07-03
    • 1970-01-01
    • 2011-06-03
    • 2018-04-15
    • 1970-01-01
    • 2020-01-24
    相关资源
    最近更新 更多