it0LinkedIn-B!Hatena0Pocket0LINESendLINESendCopy-仕事上で、Codeigniterを使って、システム開発を行う機会がありました。するシステムなので、エラーログ、SQLログとアクセスログは必須要件として、お客様から求められました。Codeigniterを初めて使うため、アーキテクチャーを担当する私にとって、ハードルが高かった。ネットの世界でいろいろ調べて、フックを使って、実現した英語サイトも見つかったが、結局ニーズに合わずに不採用でした。日本のサイトも調べましたが、こちらもニーズに合わず、諦めて、自力で調査し実現しました。・CodeIgniterバージョン:3.1.3※バージョン:3.1.6でも使えますので、3.X系はいけそうではないかと思います。要件お客様からの要件は下記の通りです。・システム運用時に、発生したエラーをログに記録し、日単位で管理すること。→ログローテーションのこと・エラーが発生した時間(ミリ秒まで)、場所、エラーメッセージをログに記録すること。実は、Codeigniterフレームワークログにもエラーログを出力していますが、管理しづらいやカスタマイズしづらいため、却下しました。それをきっかけに、エラー時のハンドリングはフレームワークのどこかに存在するはず、場所を見つけて、そこで、今回の要件を合わせて、カスタマイズすれば上手くいけるかもしれないと考えました。資料を調べたり、ソースを読んだりした結果、場所は分かりました!【system\core\Common.php】の中です。_error_handlerメソッドと_exception_handlerメソッドです。実装(_error_handlerメソッド)場所が分かれば、残すのは、実装だけです。ログ出力する必要なエラーメッセージ、ファイルと行数は_error_handlerメソッドのパラメータとして、既に存在していますので、そのまま使えばと思います。-------------------------////フレームワークの既存ソースのため、省略}実装(_exception_handlerメソッド)続いて、_exception_handlerメソッドのカスタマイズです。Exceptionが発生した際に、エラーをログに出力する必要がありますので、_error_handlerメソッドと同じように実装します。-------------------------////フレームワークの既存ソースのため、省略}サンプル上記の実装で、実際に出力したエラーログのサンプルです。force_download()まとめこれ、ムチャ!フレームワークを改造するじゃん!と叫ぶかたもいるかもしれませんが、これ以外の実装方法は恐らくないと思いますので、改造するかしないか、読者の次第と思います。ちなみに、CodeIgniterはMITライセンス、完全フリーなので、著作権などを顧慮してく良いかと思います。良い方法があれば、是非コメントでご連絡ください。SQLログの出力方法も紹介しましたので、是非一度読んでください。実際のプロジェクトにおいて、ログ出力機能は必須要件だと思います。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。テスト・運用、WEBアプリケーションの工程を数回、回ってきた40代のSEです。自称スーパーマンですが、実際は弱いです。