エラーメールを送る Monolog の設定方法 ===================================== Monolog_ は、アプリケーションでエラーが起きた際にメールを送信するように設定することができます。あまりにも多くのメールを受け取らないようにするために、コンフィギュレーションで少しネストされたハンドラが必要になります。次のようになりますが、最初は複雑に見えますがハンドラ1つずつを見ていけば、とても簡単です。 .. configuration-block:: .. code-block:: yaml # app/config/config.yml monolog: handlers: mail: type: fingers_crossed action_level: critical handler: buffered buffered: type: buffer handler: swift swift: type: swift_mailer from_email: error@example.com to_email: error@example.com subject: An Error Occurred! level: debug .. code-block:: xml ``mail`` ハンドラは ``fingers_crossed`` ハンドラで、これはつまり指定したアクションレベルに到達したときのみトリガーされます。上記の場合であれば、 ``critical`` の際に到達したとみなされます。そうなると ``critical`` より下のアクションレベルのメッセージも全てログをとるようになります。 ``critical`` レベルは HTTP のエラーステータスの 500 番台のときのみトリガーされます。 ``handler`` 設定は、出力が ``buffered`` ハンドラに渡されることを意味しています。 .. tip:: もし 400 番台と 500 番台のエラーレベルでメール送信をトリガーしたい際には、 ``action_level`` を ``critical`` ではなく ``error`` に設定してください。 ``buffered`` ハンドラは、リクエストの全てのメッセージを保持して、ネストされたハンドラにそのメッセージを渡すだけです。このハンドラを使用しなければ、それぞれのメッセージは別々にメール送信されてしまいます。このハンドラを使うことで ``swift`` ハンドラにメッセージが渡されます。 ``swift`` あは、実際にエラーメールの送信を担います。この設定は送信先のアドレス、送信者のアドレス、そして件名のみで、簡単です。 これらのハンドラは、他のハンドラと組み合わせることができますので、メールを送信するのと同時にサーバにもログを付けることができます。 .. configuration-block:: .. code-block:: yaml # app/config/config.yml monolog: handlers: main: type: fingers_crossed action_level: critical handler: grouped grouped: type: group members: [streamed, buffered] streamed: type: stream path: %kernel.logs_dir%/%kernel.environment%.log level: debug buffered: type: buffer handler: swift swift: type: swift_mailer from_email: error@example.com to_email: error@example.com subject: An Error Occurred! level: debug .. code-block:: xml この設定では ``group`` ハンドラを使って ``buffered`` ハンドラと ``stream`` ハンドラの2つのグループメンバーにメッセージを送っています。これでメッセージはログファイルに書かれますし、またメールも送信されるようになりました。 .. _Monolog: https://github.com/Seldaek/monolog .. 2011/12/27 ganchiku 9ffb64717371401e9387f2499101b1628ce62c05