例外、ログ

Tag:

例外の処理方法、Logファサードのメソッドについて取り上げます。

例外

Laravelでは、「App\Exceptions\Handlerクラス」によって、トップレベルの例外メカニズムを実現しています。つまり、アプリケーション内でハンドリングされなかった例外は、「App\Exceptions\Handlerクラス」がハンドリングしてくれます。

エラー発生時、デバックモード(.envのAPP_DEBUGがtrueである)であれば、デバック情報を詳細に出力してくれます。

reportメソッド

例外をログする。

renderメソッド

例外をHTTPレスポンスへ変換する。
例外インスタンスが、HttpExceptionクラスのインスタンスであれば、エラーページを表示。

※エラーページ
「resources/views/errors/STATUS_CODE.blade.php」が使われる。
例えば、404エラーの場合、「resources/views/errors/404.blade.php」が出力される。

対応するビューテンプレートがない場合、専用のエラーレスポンスが出力される。

カスタマイズ

デフォルトのまま利用したとき、下記動作が気になります。

・デバックモードがfalseでも、500エラー(メソッドが存在しない、変数が未定義などのバグによる)が発生したとき、symfonyのエラー画面(Whoops, looks like something went wrong.)が表示される。

対策するには、「app\Exceptions\Handler.php」のrenderメソッドをカスタマイズします。
以下のような方針で良いかと思います。

・デバッグモードのときは、デフォルトの動作にしたいので「parent::render」を呼ぶ。
・ValidationException、AuthorizationExceptionとかもデフォルトの動作にしたいので「parent::render」を呼ぶ。
・それ以外の例外で、HttpException以外の例外はHttpException(500)にする。

※参考URL
https://readouble.com/laravel/5.2/ja/errors.html
全てのエラーで任意のエラーページを出力する

ログ

Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);

スポンサーリンク