Ground Sunlight

Windowsで作る - Webプログラミングの開発環境(PHP)

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

道具箱

リポジトリ編

フレームワーク編

Webサービス編

自然言語処理環境編

メタ
リンク


このページへのアクセス
今日: 1 / 昨日: 1
総計: 24

apricot:usage:ja:errors-logging

Apricot ログとエラー処理

ロギング

ロギングは、monologをラップした Apricot\Log シングルトンが担当します。機能的には monolog と同じですが、PSR-3に従って使います。

使用法: Log::{メソッド}

メソッド機能
void emergency(string $message, array $context = [])emergencyレベルのログ
void alert(string $message, array $context = [])alertレベルのログ
void critical(string $message, array $context = [])criticalレベルのログ
void error(string $message, array $context = [])errorレベルのログ
void warning(string $message, array $context = [])warningレベルのログ
void notice(string $message, array $context = [])noticeレベルのログ
void info(string $message, array $context = [])infoレベルのログ
void debug(string $message, array $context = [])debugレベルのログ
void log($level, string $message, array $context = [])任意レベルのログ

使用例:

use Apricot\Log;
Log::exception('error',$e);


設定ファイル

ロギングには以下の設定ファイルが存在します。

{your-project}/config/setting

monolog.setting.php
<?php
/**
 * This file contains Monolog settings.
 */
return
[
    'name' => env('LOG_NAME',env('APP_NAME')),
    'path' => env('LOG_PATH',var_dir('logs')),
    'level'=> env('LOG_LEVEL','debug'),
    'max_files'=> 0,
];
  • name — ログの名前 (初期設定は、環境変数APP_NAME(無ければAPP_NAME)の値)
  • path — ログの出力パス (初期設定は、var/logs/)
  • level — ログの出力レベル (初期設定は、'debug')
  • max_files — ログファイルの最大保存数 (初期設定は、0(無制限))


集約例外ハンドラー

Apricotでは例外ハンドラーとしてWhoopsを使います。コントローラで捕捉されなかった例外は、最終的にこの例外ハンドラーで捕捉するので、これは集約例外ハンドラーと呼ばれます。

集約例外ハンドラーの動作にはデバッグモードと本番モードがあります。

  • デバッグモード — ログ出力して、例外内容とスタックトレースを表示する
  • 本番モード — ログ出力して、利用者向けのエラーページを表示する

これらの動作をカスタマイズするには、以下のWhoopsのセットアップファイルを変更して下さい。

セットアップファイル:

{your-project}/config/setup/whoops.setup.php


設定ファイル

例外ハンドラーには以下の設定ファイルが存在します。

{your-project}/config/setting

whoops.setting.php
<?php
/**
 * This file contains Whoops settings.
 */
return
[
    'debug' => env('APP_DEBUG',false),
    'controller' => \App\Exceptions\UncaughtExceptionHandler::class,
    'action' => 'render',
];
  • debug — デバッグモードの場合 true (初期設定は、環境変数APP_DEBUGの値。無ければfalse)
  • controller — 集約例外コントローラクラスを指定する (次項参照)
  • action — 集約例外コントローラのアクションメソッド名を指定する (次項参照)


集約例外コントローラ

本番モードで集約例外ハンドラーから呼び出されるコントローラを集約例外コントローラと呼びます。上述の whoops.setting.php での設定に従い、例外発生時に UncaughtExceptionHandler クラスの render() メソッドが実行されてエラーページを表示します。

初期実装されている集約例外コントローラでは、例外の種類に応じてHTTPステータスコードを以下のように設定します。

  • CSRFエラーなどの TokenMismatchException( トークンエラー )は419( Page Expired )に設定
  • HttpException( ヘルパー関数 abort() によるHTTP例外 )はそのステータスコードを使用
  • その他の例外は 500( Internal Server Error )に設定

集約例外コントローラは以下に配置されています。必要に応じてカスタマイズできます。

{your-project}/app/Exceptions/UncaughtExceptionHandler.php


コアの例外クラス

Exceptionを継承した2つの例外クラスがあります。

  • Apricot\Exceptions\HttpException
    HTTP例外(HTTPステータスコード400番台,500番台)
  • Apricot\Exceptions\TokenMismatchException
    トークンミスマッチ例外(CSRFトークンなどの不一致)


アプリの例外クラス

App\Exceptions\ApplicationException はアプリで発生する例外クラスのベースクラスで、Exceptionクラス から派生しています。そして、ApplicationExceptionから派生した以下のクラスがあります。

  • App\Exceptions\OptimissticLockException 
    楽観的ロック例外


エラーバッグ

エラーバッグ( Apricot\Foundation\ErrorBag )は、入力エラーなどの業務的なエラー(例外でないエラー)の為のクラスです。ErrorBag は ValidatorErrorBagクラス のベースクラスです。

ErrorBag には名前を付けることができます。バッグ内のエラーはキー付きの連想配列で保存されています。ErrorBagには以下のメソッドがあります。

メソッド機能
__construct(array $errors=null, string $name=self::DEFAULT_NAME)エラーバッグの生成
count(string $name=null):intエラー数の取得
has(string $key, string $name=self::DEFAULT_NAME):boolキーによるエラーの存在確認
get(string $key, string $name=self::DEFAULT_NAME)キーによるエラーの取得
all(string $name=null):array全てのエラーの取得
put($errors)エラー配列の設定

エラーバッグはIteratorAggregateインターフェースを実装してるのでforeach()などのIteratorを使用した構文が使用できます。但し、Countable インターフェイス は実装していないので、count関数ではなくErrorBag@countメソッドを使用して下さい。


コメント

コメントを入力. Wiki文法が有効です:
 
apricot/usage/ja/errors-logging.txt · 最終更新: 2020/08/15 16:37 by y2sunlight