Laravel 4.2 エラーとログ

設定

アプリケーションのログハンドラーは、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で定義されているdebuginfonoticewarningerrorcriticalalertの7レベルをサポートしています。

ログメソッドにはコンテキストデーターを配列で渡すこともできます。

Log::info('Log message', array('context' => 'Other helpful information'));

Monologにはログに使えるその他の多彩なハンドラーが用意されています。必要であれば、Laravelが内部で使用しているMonologインスタンスへアクセスすることもできます。

$monolog = Log::getMonolog();

ログに渡される全てのメッセージを捉えるため、イベントを登録することもできます。

ログリスナーを登録する

Log::listen(function($level, $message, $context)
{
    //
});

ドキュメント章別ページ

Artisan CLI

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

バージョン

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる