このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
apricot:usage:ja:errors-logging [2020/08/05 09:14] tanaka [ロギング] |
apricot:usage:ja:errors-logging [2020/08/21 14:51] y2sunlight |
||
---|---|---|---|
行 1: | 行 1: | ||
- | > 編集中 | ||
- | |||
- | ---- | ||
- | |||
====== Apricot ログとエラー処理 ====== | ====== Apricot ログとエラー処理 ====== | ||
--- // | --- // | ||
- | [[apricot: | + | [[apricot: |
目次 | 目次 | ||
行 15: | 行 11: | ||
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * [[apricot: |
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
行 24: | 行 22: | ||
===== ロギング ===== | ===== ロギング ===== | ||
- | ロギングは、monologをラップしたLogクラスが担当します。Logクラスはシングルトンとして実装し、以下のように使用します。機能的にはmonologと同じですが、[[https:// | + | ロギングは、[[https:// |
使用法: **Log:: | 使用法: **Log:: | ||
行 39: | 行 37: | ||
|void log($level, string $message, array $context = [])|任意レベルのログ| | |void log($level, string $message, array $context = [])|任意レベルのログ| | ||
- | ==== 設定ファイル ==== | + | 使用例: |
- | {{fa> | + | <code php> |
+ | use Apricot\Log; | ||
+ | Log:: | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === 設定ファイル === | ||
+ | |||
+ | ロギングには以下の設定ファイルが存在します。 | ||
+ | |||
+ | {{fa> | ||
<code php monolog.setting.php> | <code php monolog.setting.php> | ||
<?php | <?php | ||
+ | /** | ||
+ | * This file contains Monolog settings. | ||
+ | */ | ||
return | return | ||
[ | [ | ||
行 53: | 行 65: | ||
</ | </ | ||
- | * name --- ログの名前(既定値は 環境変数APP_NAMEの値) | + | * name --- ログの名前 (初期設定は、環境変数APP_NAME(無ければAPP_NAME)の値) |
- | * path --- ログの出力パス(既定値は var/ | + | * path --- ログの出力パス (初期設定は、var/ |
- | * level --- ログの出力レベル(既定値は ' | + | * level --- ログの出力レベル (初期設定は、' |
- | * max_files --- ログファイルの最大保存数(0は無制限) | + | * max_files --- ログファイルの最大保存数 (初期設定は、0(無制限)) |
\\ | \\ | ||
- | ===== エラーハンドラーの設定 ===== | + | ===== 集約例外ハンドラー ===== |
- | >TODO | + | |
+ | Apricotでは例外ハンドラーとして[[https:// | ||
+ | |||
+ | 集約例外ハンドラーの動作にはデバッグモードと本番モードがあります。 | ||
+ | |||
+ | * デバッグモード --- ログ出力して、例外内容とスタックトレースを表示する | ||
+ | * 本番モード --- ログ出力して、利用者向けのエラーページを表示する | ||
+ | |||
+ | これらの動作をカスタマイズするには、以下のWhoopsのセットアップファイルを変更して下さい。 | ||
+ | |||
+ | セットアップファイル: | ||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === 設定ファイル === | ||
+ | |||
+ | 例外ハンドラーには以下の設定ファイルが存在します。 | ||
+ | |||
+ | {{fa> | ||
+ | <code php whoops.setting.php> | ||
+ | <?php | ||
+ | /** | ||
+ | * This file contains Whoops settings. | ||
+ | */ | ||
+ | return | ||
+ | [ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ]; | ||
+ | </ | ||
+ | |||
+ | * debug --- デバッグモードの場合 true (初期設定は、環境変数APP_DEBUGの値。無ければfalse) | ||
+ | * controller --- 集約例外コントローラクラスを指定する (次項参照) | ||
+ | * action --- 集約例外コントローラのアクションメソッド名を指定する (次項参照) | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === 集約例外コントローラ | ||
+ | |||
+ | 本番モードで集約例外ハンドラーから呼び出されるコントローラを集約例外コントローラと呼びます。上述の whoops.setting.php での設定に従い、例外発生時に '' | ||
+ | |||
+ | 初期実装されている集約例外コントローラでは、例外の種類に応じてHTTPステータスコードを以下のように設定します。 | ||
+ | |||
+ | * CSRFエラーなどの TokenMismatchException( トークンエラー )は419( Page Expired )に設定 | ||
+ | * HttpException( ヘルパー関数 '' | ||
+ | * その他の例外は 500( Internal Server Error )に設定 | ||
+ | |||
+ | 集約例外コントローラは以下に配置されています。必要に応じてカスタマイズできます。 | ||
+ | |||
+ | <code> | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== コアの例外クラス ===== | ||
+ | |||
+ | Exceptionを継承した2つの例外クラスがあります。 | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== アプリの例外クラス ===== | ||
+ | |||
+ | '' | ||
+ | |||
+ | * '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== エラーバッグ ===== | ||
+ | |||
+ | エラーバッグ( '' | ||
+ | |||
+ | ErrorBag には名前を付けることができます。バッグ内のエラーはキー付きの連想配列で保存されています。ErrorBagには以下のメソッドがあります。 | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |< | ||
+ | |count(string $name=null): | ||
+ | |has(string $key, string $name=self:: | ||
+ | |get(string $key, string $name=self:: | ||
+ | |all(string $name=null): | ||
+ | |put($errors)|エラー配列の設定| | ||
+ | |||
+ | エラーバッグは[[https:// | ||
\\ | \\ | ||