設定
アプリケーションのログハンドラーは、app/start/global.php
スタートファイルで登録されています。デフォルトでは、このロガーはログファイルを一つだけ使用するように設定されています。しかしながら、必要であれば、この動作を変更できます。Laravelは人気のあるMonologログライブラリーを使用していますので、このライブラリーが提供する様々なハンドラーを利用できる長所があります。
例えば、大きな1ファイルにログを残す代わりに、日毎のファイルへログしたい場合は、スタートファイルを以下のように修正してください。
$logFile = 'laravel.log';
Log::useDailyFiles(storage_path().'/logs/'.$logFile);
エラー詳細
デフォルトではアプリケーションのエラー詳細は出力される設定になっています。これはエラー発生時にエラーページでスタックトレースとエラーメッセージを表示するためです。エラーの詳細を表示しないようにするためには、app/config/app.php
ファイル中のdebug
オプションをfalse
に設定してください。
Note: 特に実機での運用環境では、エラー詳細表示をオフにしておくことを強く推奨します。
エラーの処理
デフォルトでは、app/start/global.php
ファイルで全ての例外の処理を行なっています。
App::error(function(Exception $exception)
{
Log::error($exception);
});
これはもっとも基本的なエラー処理です。必要に応じ、もっと多くの処理を指定してください。ハンドラーは処理する例外のタイプヒントを元に呼び出されます。例えば、RuntimeException
のみを処理するハンドラーを作成したいのならば:
App::error(function(RuntimeException $exception)
{
// この例外を処理する...
});
もし例外ハンドラーが、レスポンスをリターンしたら、それはブラウザーに送信され、他のハンドラーは呼び出されません。
App::error(function(InvalidUserException $exception)
{
Log::error($exception);
return '恐れ入ります。このアカウントで不具合が発生したようです!';
});
PHPのfatalエラーをリッスンするにはApp::fatal
メソッドを使用します。
App::fatal(function($exception)
{
//
});
複数の例外ハンドラーを使用する場合、一般的なものから限定的なものへの順番で定義してください。例えば、全部の例外を処理するタイプException
の例外のハンドラーは、カスタム例外、例えばIlluminate\Encryption\DecryptException
のハンドラーより前で定義する必要があります。
エラーハンドラーの設置場所
エラーハンドラーを登録しておく、決まったデフォルトの設置場所はありません。Laravelでは、皆さんに自由に決めてもらっています。start/global.php
ファイルに設置するのはひとつのオプションです。一般的に、このファイルは「初期設定」コードを設置するために便利な場所と言えるでしょう。このファイルが乱雑になってきたら、app/errors.php
ファイルを作成し、start/global.php
スクリプトの中からrequire
することもできます。3つ目のオプションはサービスプロバイダーでハンドラーを登録する方法です。いずれにせよ、「正しい」一つの答えは存在しません。皆さんが快適に思える場所で設定してください。
HTTP例外
いくつかの例外は、サーバーからのHTTPエラーコードを表しています。例えば、「ページが見つかりません(404)」であったり、「認証されていないエラー(401)」であったり、開発者が発生させた500エラーであることもあるでしょう。このようなレスポンスをリターンしたい場合には、以下のように行なってください。
App::abort(404);
オプションとして、理由を説明することもできます。
App::abort(403, 'Unauthorized action.');
このメソッドはリクエストのライフサイクル中であれば、いつでも使用できます。
404エラーの処理
カスタム404エラーページを表示するのは簡単で、アプリケーション中の全「404 見つかりません」エラーを処理するためのエラーハンドラーを登録し、エラービューをリターンしてください。
App::missing(function($exception)
{
return Response::view('errors.missing', array(), 404);
});
ログ
Laravelのログ機能はパワフルなMonologをラップした、シンプルなレイヤーです。Laravelはアプリケーションにログファイルを一つ作成し、app/storage/logs/laravel.log
に保存するデフォルト設定になっています。以下のように、情報をログできます。
Log::info('なにか役に立つ情報');
Log::warning('悪いことが起きている可能性がある情報');
Log::error('本当に悪いことが起きた情報');
ログはRFC 5424で定義されているdebug、 info、 notice、 warning、 error、 critical、alertの7レベルをサポートしています。
ログメソッドにはコンテキストデーターを配列で渡すこともできます。
Log::info('Log message', array('context' => 'Other helpful information'));
Monologにはログに使えるその他の多彩なハンドラーが用意されています。必要であれば、Laravelが内部で使用しているMonologインスタンスへアクセスすることもできます。
$monolog = Log::getMonolog();
ログに渡される全てのメッセージを捉えるため、イベントを登録することもできます。
ログリスナーを登録する
Log::listen(function($level, $message, $context)
{
//
});