Laravel 5.0 エラーとログ

設定

アプリケーションのログ機能は、Illuminate\Foundation\Bootstrap\ConfigureLogging初期化クラスの中で設定しています。このクラスはconfig/app.php設定ファイルのlogオプションを参照します。

デフォルトのログ機能は、日別のログファイルを使用するように設定されています。これは必要に応じてカスタマイズできます。LaravelはポピュラーなMonologログライブラリーを使用しています。Monologが提供する様々なハンドラーを利用することができます。

例えば、日別のファイルの代わりに同じログファイルを続けて使用したい場合、config/app.php設定ファイルを以下のように変更してください。

'log' => 'single'

Laravelは初めから、単一ファイル(single)、日別ファイル(daily)、 システムログ(syslog)、エラーログ(errorlog)ログモードをサポートしています。。しかし、アプリケーションに合わせるため、ログをカスタマイズしたいのでしたら、ConfigureLogging初期設定クラスを自由にオーバーライドできます。

エラー詳細

config/app.php設定ファイルのapp.debug設定オプションにより、ブラウザに出力されるアプリケーションのエラー詳細をコントロールできます。デフォルトでは、この設定オプションは、.envファイルで設定されているAPP_DEBUG環境変数を反映するように設定されています。

ローカル環境では、APP_DEBUG環境変数をtureに設定すべきでしょう。実働環境では、この値は常にfalseにしてください。

エラーの処理

全例外はApp\Exceptions\Handlerクラスで処理されます。このクラスはreportrenderメソッドで構成されています。

reportメソッドは例外のログや、BugSnagのような外部サービスにメールを送るために使用します。デフォルトでは、例外をログしている親クラスの基本的な実装へ渡すだけです。しかし、例外をお好きなようにログしてかまいません。それぞれの例外タイプを異なった方法でログする必要があれば、PHPのinstanceof比較演算子が使えます。

/**
 * 例外をレポートもしくはログする
 *
 * SentryやBugsnagなどにレポートするために最適な場所
 *
 * @param  \Exception  $e
 * @return void
 */
public function report(Exception $e)
{
    if ($e instanceof CustomException)
    {
        //
    }

    return parent::report($e);
}

renderメソッドは例外をHTTPレスポンスに変換し、ブラウザに送り返す役割を持っています。デフォルトでは、例外はレスポンスを生成するベースクラスへ渡されます。しかし、例外のタイプを調べ、カスタムレスポンスを返すのも自由です。

例外ハンドラーのdontReportプロパティは、ログしない例外タイプの配列で構成されています。デフォルトでは、404エラーを示す例外はログファイルに書き込まれません。必要に応じ、他の例外タイプを配列に追加してください。

HTTP例外

いくつかの例外は、サーバーからのHTTPエラーコードを表しています。例えば、「ページが見つかりません(404)」であったり、「認証されていないエラー(401)」であったり、開発者が発生させた500エラーであることもあるでしょう。このようなレスポンスを返したい場合には、次のようにしてください。

abort(404);

オプションとして、理由を説明することもできます。

abort(403, '許可されていないアクションです。');

このメソッドはリクエストのライフサイクル中であれば、いつでも使用できます。

404エラーページのカスタマイズ

全ての404エラーでカスタムビューを返すためには、resources/views/errors/404.blade.phpファイルを作成してください。アプリケーションで起きる全404エラーに対し、このビューが表示されるようになります。

ログ

Laravelのログ機能は、強力なMonologライブラリーのシンプルな上位レイヤーを提供しています。Laravelはデフォルトで、アプリケーションの日別ログファイルをstorage/logsディレクトリーへ作成するように設定されています。ログへ情報を書き込みたい場合は、以下のように行います。

Log::info('これは便利な情報です。');

Log::warning('なんだか悪いことが起きているかも知れません。');

Log::error('何か本当に悪いことが起きています。');

ログはRFC 5424で定義されているdebuginfonoticewarningerrorcriticalalertの7レベルをサポートしています。

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

Log::info('Log message', ['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)へ移動

その他

?

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