CodeIgniter エラー検知通知メールを送信する

スポンサーリンク

前説

アプリケーションの運用管理において、エラーが発生した際に、それを検知し、保守担当チームにエラー検知通知メールを送信することが当然な話ですが、残念ながら、小規模ECサイトなどのWEBアプリケーションにおいて、予算や認識などいろいろな要因で、エラー検知手段を設けずに、あとからエンドユーザーのクレームにより、初めてエラーが発生したことが分かったことが多いそうです。
それはサービスの品質の改善、向上に非常に良くないため、プロジェクトの要件定義段階で、「エラー検知通知メールを送信する」を要件に入れて、お客様に説得し、実現しましょう。
実現方法は2通しかないと思います。一つは、JP1などの運用管理ツールを導入することです。運用管理ツールはいろんな素晴らしい機能が付いていますが、導入費用がとても高いため、中小企業には、向いていないと思います。もう一つの方法は、自力で実現することです。今日はこの方法を中心に話させて頂きたいと思います。

それでは、今回は、「CodeIgniter エラー検知通知メールを送信する」というテーマで、CodeIgniterフレームワークにおいて、エラー通知メールの実現方法を紹介したいと思います。CodeIgniterと言っても、考え方は同じなので、ほかのフレームワークにも通用ではないかと思います。そこは皆さんのご判断に任せます。

前提

・CodeIgniterバージョン:3.1.3
※バージョン:3.1.6でも使えますので、3.X系はいけそうではないかと思います。

要件

システムエラーが発生した際に、発生した時間、内容をリアルタイムで保守チームにメールを送信すること。つまり、エラー検知通知メールを送信することです。

考え方

考え方は簡単です。エラーハンドリングのところに、ついでに、エラー検知通知メールを送信すれば、済むということです。
CodeIgniterのエラーハンドリングについては、こちらのCodeIgniter エラーログの出力をご参考し、詳細は割愛させていただきます。

1.エラーハンドリング

CodeIgniter エラーログの出力にも記載しておりますが、エラーハンドリングは2箇所があります。system\core\Common.phpの_error_handlerメソッドと_exception_handlerメソッドです。
エラーログを出力した後に、エラーの発生時間と内容をメールにも出力すれば、完成です。1点注意するところがあり、エラーメッセージが長い場合、メール送信したら、読みづらいため、最初の100文字とか、1000文字とかだけをメールに記載すれば良いかと思います。
エラー検知通知メールを送信することは、あくまで、エラーが発生しましたよという通知することで、具体的な内容はあとで、運用担当者はエラーログを確認する際に、全てが分かりますので、簡単な内容だけ通知すれば良いかと思います。

上記のソースは、_error_handlerメソッドのサンプルです。_exception_handlerメソッドは(ファイル名と行数)若干違いますが、考え方が同じです。

2.エラー検知通知メールを送信する関数

コアのエラー検知通知メールを送信する関数です。関数名は長くて難しそうに見えますが、本質的なところ、簡単、メール送信です。
メール本文は、Smartyを使って、発生時間などの変数が置換することにします。簡単なので、一気にサンプルを上げます。

3.エラー検知通知メール本文

エラー検知通知メール本文error_mail.tplの中身です。簡単なので、説明を割愛させていただきます。

まとめ

今回は「CodeIgniter エラー検知通知メールを送信する」というテーマで、エラー発生時のメール送信方法を紹介しました。いかがでしょうか。簡単ですよね。個人的に、CodeIgniter エラーログの出力をマスタすれば、エラー検知通知メールを送信することは、単なるメール送信に過ぎないと思います。
それでは、以上です。

スポンサーリンク