2

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

この設定では、重大なエラーは発生しますが、重大ではないエラーは発生しません。

この設定は、この質問に対する(受け入れられていない)回答に大まかに基づいていました。電子メールの件名にログの重大度を含めるにはどうすればよいですか?。(それが私のために働いていたら、私は答えに賛成票を投じたでしょう!!)

誰かがこれの何が悪いのかを見つけることができますか?

ありがとう!

4

1 に答える 1

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

2つのハンドラーチェーンも見やすくするために、それらを並べ替えました。

于 2012-11-30T10:35:56.503 に答える