よくある例
try {
// いろいろ処理
} catch (Exception $e) {
// エラーだったらとりあえずリダイレクトじゃい
return $this->redirect(~);
}
上記のように、エラーをキャッチしてもログを出力せずに TODO:エラーログを吐く
とか書かれてたりしますよね。
解決するには、ちゃんとエラーログを吐け!って話なのですがどうやって吐くのかわからないからTODOで済ませてるのかなと感じます。
一番良いのはフレームワークに搭載されているLoggerを利用するというのが一番良いのですが、
Loggerがちゃんと整備されてないとなると難しいことになります。(monolog突っ込む?でも入れ方が・・・)
実は、PHPには標準でエラーログを吐く関数があるんです・・・!
標準関数error_logでログを吐かせよう
PHPのエラーログの関数はerror_logという名前の関数です。非常にわかりやすい。
try {
// いろいろ処理
} catch (Exception $e) {
// エラーログを吐く
error_log($e->getMessage());
return $this->redirect(~);
}
まずはerror_log関数から始めて、monologに移行する準備をすると良いでしょう。
なお、error_log関数は文字列しか受け付けないのでちゃんと変換しておく必要があります。
余談(なぜ吐かせるべきか)
単純な話で言えば、デバッグしやすくするためです。これが一番いきるのは例外を内部で握りつぶしてfalseなどのbool値として返す時です。
Phalconでこれはありましたが、ORMを利用してリレーションも組んでいた状態でデータを取得してupdateメソッドを実行しました。(ここを探すのも苦労します)
データは取得できたのに、何故かupdateメソッドが失敗(false)します。
原因はリレーションをしているカラムが存在しなかったためエラーになってました。(Phalconが問題を握りつぶしてfalseを返してたのがそもそもの問題ですが)
updateメソッドの後に失敗した時にgetMessagesメソッドを利用してエラー内容をログに吐いていなかったため見つけることが難しい事態になっていました。
このような事態を起こさないためにもエラーログを出力する関数と、エラーメッセージを取得するメソッドを活用して記述をしましょう。