Issei.M's Techlog

Web/iOS エンジニアの僕が技術関連のメモ等をつらつらと。主に Symfony について書いています。

[Monolog][Symfony] Monolog が神過ぎる件 ~エラーログをメールで送ろう~

Symfony で採用されているロガーライブラリ Monolog は Python の LogBook と言うライブラリに影響を受けており、 柔軟なロギング処理が可能です。
今回は、Symfony の運用環境でERRORレベル以上のログをファイルに書き込みつつ、メールでも通知するように設定してみます。

以下、config.yml記述例。

monolog:
    handlers:
        # ERROR 以上でログファイル書き込み+メール送信
        main:
            type:         fingers_crossed
            action_level: ERROR
            handler:      grouped
        # 以下 fingers_crossed 用
        grouped:
            type:    group
            members: [file, email]
        file:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: DEBUG
        email:
            type:       swift_mailer
            from_email: no-reply@example.com
            to_email:   issei.m7@gmail.com
            subject:    "[example.com] An error occurred!"
            level:      DEBUG

mainにはERRORレベル以上でgroupedが処理され、fileemailが実行されるように設定しています。

このfingers_crossedが非常に優秀でgrouped, file, emailmainの下位ハンドラとなっており、通常は処理されません。この為fileemailはレベルがDEBUGですが、エラー発生時にだけ該当セッション中の全ログが書き込まれます。

これで無駄にログを肥大させる事なく、デバッグ効率が格段上がりまくりんぐです。