Commit ec64132a by Nobuo Kihara

docs/guide-ja/runtime - reviewed [ci skip]

parent 84976bd7
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
========== ==========
Yii は、エラー処理を従来よりはるかに快適な経験にしてくれる、内臓の [[yii\web\ErrorHandler|エラーハンドラ]] を持っています。 Yii は、エラー処理を従来よりはるかに快適な経験にしてくれる、内臓の [[yii\web\ErrorHandler|エラーハンドラ]] を持っています。
具体的には、Yii のエラーハンドラはエラー処理を向上させるために、次のことを行います。 具体的には、Yii のエラーハンドラはエラー処理をより良くするために、次のことを行います。
* 致命的でない全ての PHP エラー (警告や通知) は捕捉可能な例外に変換されます。 * 致命的でない全ての PHP エラー (警告や通知) は捕捉可能な例外に変換されます。
* 例外と致命的な PHP エラーは、デバッグモードでは、詳細なコールスタック情報とソースコード行とともに表示されます。 * 例外と致命的な PHP エラーは、デバッグモードでは、詳細なコールスタック情報とソースコード行とともに表示されます。
...@@ -46,8 +46,8 @@ try { ...@@ -46,8 +46,8 @@ try {
// 実行を継続 ... // 実行を継続 ...
``` ```
ユーザに対して、リクエストが無効であったり予期しないものであったりすることを知らせるエラーページを表示したい場合は、単に [[yii\web\NotFoundHttpException]] のような [[yii\web\HttpException|HTTP 例外]] を投げるだけで済ませることが出来ます。 リクエストが無効または予期しないものであることをユーザに知らせるエラーページを表示したい場合は、単に [[yii\web\NotFoundHttpException]] のような [[yii\web\HttpException|HTTP 例外]] を投げるだけで済ませることが出来ます。
エラーハンドラがレスポンスの HTTP ステータスコードを正しく設定し、適切なエラービューを使ってエラーメッセージを表示してくれます。 そうすれば、エラーハンドラがレスポンスの HTTP ステータスコードを正しく設定し、適切なエラービューを使ってエラーメッセージを表示してくれます。
```php ```php
use yii\web\NotFoundHttpException; use yii\web\NotFoundHttpException;
...@@ -59,8 +59,8 @@ throw new NotFoundHttpException(); ...@@ -59,8 +59,8 @@ throw new NotFoundHttpException();
## エラー表示をカスタマイズする <span id="customizing-error-display"></span> ## エラー表示をカスタマイズする <span id="customizing-error-display"></span>
[[yii\web\ErrorHandler|エラーハンドラ]] は、定数 `YII_DEBUG` の値に従って、エラー表示を調整します。 [[yii\web\ErrorHandler|エラーハンドラ]] は、定数 `YII_DEBUG` の値に従って、エラー表示を調整します。
`YII_DEBUG` が true である (デバッグモードである) 場合は、エラーハンドラは、デバッグがより容易になるように、詳細なコールスタック情報とソースコード行とともに例外を表示します。 `YII_DEBUG` が true である (デバッグモードである) 場合は、エラーハンドラは、デバッグがより容易になるように、例外とともに、詳細なコールスタック情報とソースコード行を表示します。
そして、`YII_DEBUG` が false のときは、アプリケーションに関する公開できない情報を開示することを防ぐために、エラーメッセージだけが表示されます。 そして、`YII_DEBUG` が false のときは、アプリケーションに関する公開できない情報の開示を防ぐために、エラーメッセージだけが表示されます。
> Info|情報: 例外が [[yii\base\UserException]] の子孫である場合は、`YII_DEBUG` の値の如何にかかわらず、コールスタックは表示されません。 > Info|情報: 例外が [[yii\base\UserException]] の子孫である場合は、`YII_DEBUG` の値の如何にかかわらず、コールスタックは表示されません。
これは、この種の例外はユーザの誤操作によって引き起こされるものであり、開発者は何も修正する必要がないと考えられるからです。 これは、この種の例外はユーザの誤操作によって引き起こされるものであり、開発者は何も修正する必要がないと考えられるからです。
...@@ -90,7 +90,7 @@ return [ ...@@ -90,7 +90,7 @@ return [
``` ```
[[yii\web\ErrorHandler::errorAction|errorAction]] プロパティは、アクションへの [ルート](structure-controllers.md#routes) を値として取ります。 [[yii\web\ErrorHandler::errorAction|errorAction]] プロパティは、アクションへの [ルート](structure-controllers.md#routes) を値として取ります。
上記の構成は、エラーをコールスタック情報なしで表示する必要がある場合は、`site/error` アクションが実行されるべきであることを記述しています。 上記の構成は、エラーをコールスタック情報なしで表示する必要がある場合は、`site/error` アクションが実行されるべきことを記述しています。
`site/error` アクションは次のようにして作成することが出来ます。 `site/error` アクションは次のようにして作成することが出来ます。
...@@ -133,17 +133,16 @@ public function actionError() ...@@ -133,17 +133,16 @@ public function actionError()
* `name`: エラーの名前。 * `name`: エラーの名前。
* `message`: エラーメッセージ。 * `message`: エラーメッセージ。
* `exception`: 例外オブジェクト。これを通じて、更に有用な情報、例えば、HTTP ステータスコード、 * `exception`: 例外オブジェクト。これを通じて、更に有用な情報、例えば、HTTP ステータスコード、エラーコード、エラーコールスタックなどにアクセスすることが出来ます。
エラーコード、エラーコールスタックなどにアクセス出来ます。
> Info|情報: あなたが [ベーシックアプリケーションテンプレート](start-installation.md) または [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) を使っている場合は、エラーアクションとエラービューは、既にあなたのために定義されています。 > Info|情報: あなたが [ベーシックアプリケーションテンプレート](start-installation.md) または [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) を使っている場合は、エラーアクションとエラービューは、既にあなたのために定義されています。
### エラーのレスポンス形式をカスタマイズする <span id="error-format"></span> ### エラーのレスポンス形式をカスタマイズする <span id="error-format"></span>
エラーハンドラは、[レスポンス](runtime-responses.md) 形式の設定に従ってエラーを表示します。 エラーハンドラは、[レスポンス](runtime-responses.md) 形式の設定に従ってエラーを表示します。
[[yii\web\Response::format|レスポンス形式]] が `html` である場合は、直前の項で説明したように、エラービューまたは例外ビューを使ってエラーを表示します。 [[yii\web\Response::format|レスポンス形式]] が `html` である場合は、直前の項で説明したように、エラービューまたは例外ビューを使ってエラーを表示します。
その他のレスポンス形式の場合は、エラーハンドラは例外の配列表現を [[yii\web\Response::data]] プロパティに代入し、次に `data` プロパティがレスポンス形式に応じて様々な形式に変換されます。 その他のレスポンス形式の場合は、エラーハンドラは例外の配列表現を [[yii\web\Response::data]] プロパティに代入し、次に `data` プロパティをレスポンス形式に応じて様々な形式に変換します。
例えば、レスポンス形式が `json` である場合は、次のようなレスポンスになります。 例えば、レスポンス形式が `json` である場合は、次のようなレスポンスになります。
``` ```
......
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
======== ========
Yii は高度なカスタマイズ性と拡張性を持った強力なロギングフレームワークを提供しています。 Yii は高度なカスタマイズ性と拡張性を持った強力なロギングフレームワークを提供しています。
このフレームワークを使用すると、さまざまな種類のメッセージを記録し、フィルタして、ファイル、データベース、メールなど、さまざまなターゲットに収集することが簡単に出来ます。 このフレームワークを使用すると、さまざまな種類のメッセージを記録し、それをフィルタして、ファイル、データベース、メールなど、さまざまなターゲットに収集することが簡単に出来ます。
Yii のロギングフレームワークを使うためには、下記のステップを踏みます。 Yii のロギングフレームワークを使うためには、下記のステップを踏みます。
* コードのさまざまな場所で [ログメッセージ](#log-messages) を記録する。 * コードのさまざまな場所で [ログメッセージ](#log-messages) を記録する。
* アプリケーションの構成情報で [ログターゲット](#log-targets) を構成して、ログメッセージをフィルタしてエクスポートする。 * ログメッセージをフィルタしてエクスポートするために、アプリケーションの構成情報で [ログターゲット](#log-targets) を構成する。
* さまざまなターゲット (例えば [Yii デバッガ](tool-debugger.md)) によって、フィルタされエクスポートされたログメッセージを調査する。 * さまざまなターゲット (例えば [Yii デバッガ](tool-debugger.md)) によって、フィルタされエクスポートされたログメッセージを調査する。
この節では、主として最初の二つのステップについて説明します。 この節では、主として最初の二つのステップについて説明します。
...@@ -17,7 +17,7 @@ Yii 縺ョ繝ュ繧ョ繝ウ繧ー繝輔Ξ繝シ繝繝ッ繝シ繧ッ繧剃スソ縺◆繧√↓縺ッ縲∽ク玖ィ倥繧ケ繝 ...@@ -17,7 +17,7 @@ Yii 縺ョ繝ュ繧ョ繝ウ繧ー繝輔Ξ繝シ繝繝ッ繝シ繧ッ繧剃スソ縺◆繧√↓縺ッ縲∽ク玖ィ倥繧ケ繝
ログメッセージを記録することは、次のログ記録メソッドのどれかを呼び出すだけの簡単なことです。 ログメッセージを記録することは、次のログ記録メソッドのどれかを呼び出すだけの簡単なことです。
* [[Yii::trace()]]: コードの断片がどのように走るかをトレースするメッセージを記録します。主として開発のために使用します。 * [[Yii::trace()]]: コードの断片がどのように走ったかをトレースするメッセージを記録します。主として開発のために使用します。
* [[Yii::info()]]: 何らかの有用な情報を伝えるメッセージを記録します。 * [[Yii::info()]]: 何らかの有用な情報を伝えるメッセージを記録します。
* [[Yii::warning()]]: 何か予期しないことが発生したことを示す警告メッセージを記録します。 * [[Yii::warning()]]: 何か予期しないことが発生したことを示す警告メッセージを記録します。
* [[Yii::error()]]: 出来るだけ早急に調査すべき致命的なエラーを記録します。 * [[Yii::error()]]: 出来るだけ早急に調査すべき致命的なエラーを記録します。
...@@ -48,8 +48,7 @@ Yii::trace('蟷ウ蝮庶逶翫險育ョ励r髢句ァ', __METHOD__); ...@@ -48,8 +48,7 @@ Yii::trace('蟷ウ蝮庶逶翫險育ョ励r髢句ァ', __METHOD__);
> Info|情報: 上記で説明したメソッドは、実際には、[[yii\log\Logger|ロガーオブジェクト]] の [[yii\log\Logger::log()|log()]] メソッドへのショートカットです。 > Info|情報: 上記で説明したメソッドは、実際には、[[yii\log\Logger|ロガーオブジェクト]] の [[yii\log\Logger::log()|log()]] メソッドへのショートカットです。
[[yii\log\Logger|ロガーオブジェクト]] は `Yii::getLogger()` という式でアクセス可能なシングルトンです。 [[yii\log\Logger|ロガーオブジェクト]] は `Yii::getLogger()` という式でアクセス可能なシングルトンです。
ロガーオブジェクトは、十分な量のメッセージが記録されたとき、または、アプリケーションが終了するときに、[[yii\log\Dispatcher|メッセージディスパッチャ]] ロガーオブジェクトは、十分な量のメッセージが記録されたとき、または、アプリケーションが終了するときに、[[yii\log\Dispatcher|メッセージディスパッチャ]] を呼んで、登録された [ログターゲット](#log-targets) に記録されたログメッセージを送信します。
を呼んで、登録された [ログターゲット](#log-targets) に記録されたログメッセージを送信します。
## ログターゲット <span id="log-targets"></span> ## ログターゲット <span id="log-targets"></span>
...@@ -59,8 +58,7 @@ Yii::trace('蟷ウ蝮庶逶翫險育ョ励r髢句ァ', __METHOD__); ...@@ -59,8 +58,7 @@ Yii::trace('蟷ウ蝮庶逶翫險育ョ励r髢句ァ', __METHOD__);
例えば、[[yii\log\DbTarget|データベースターゲット]] は、フィルタされたログメッセージをデータベーステーブルにエクスポートし、[[yii\log\EmailTarget|メールターゲット]] は、ログメッセージを指定されたメールアドレスにエクスポートします。 例えば、[[yii\log\DbTarget|データベースターゲット]] は、フィルタされたログメッセージをデータベーステーブルにエクスポートし、[[yii\log\EmailTarget|メールターゲット]] は、ログメッセージを指定されたメールアドレスにエクスポートします。
一つのアプリケーションの中で複数のログターゲットを登録することが出来ます。 一つのアプリケーションの中で複数のログターゲットを登録することが出来ます。
そのためには、次のように、 そのためには、次のように、アプリケーションの構成情報の中で、`log` [アプリケーションコンポーネント](structure-application-components.md) によってログターゲットを構成します。
アプリケーションの構成情報の中で、`log` [アプリケーションコンポーネント](structure-application-components.md) によってログターゲットを構成します。
```php ```php
return [ return [
...@@ -81,7 +79,7 @@ return [ ...@@ -81,7 +79,7 @@ return [
'message' => [ 'message' => [
'from' => ['log@example.com'], 'from' => ['log@example.com'],
'to' => ['admin@example.com', 'developer@example.com'], 'to' => ['admin@example.com', 'developer@example.com'],
'subject' => 'Database errors at example.com', 'subject' => 'example.com で、データベースエラー発生',
], ],
], ],
], ],
...@@ -96,7 +94,7 @@ return [ ...@@ -96,7 +94,7 @@ return [
上記のコードでは、二つのログターゲットが [[yii\log\Dispatcher::targets]] プロパティに登録されています。 上記のコードでは、二つのログターゲットが [[yii\log\Dispatcher::targets]] プロパティに登録されています。
* 最初のターゲットは、エラーと警告のメッセージを選択して、データベーステーブルに保存します。 * 最初のターゲットは、エラーと警告のメッセージを選択して、データベーステーブルに保存します。
* 第二のターゲットは、名前が `yii\db\` で始まるカテゴリの下のエラーメッセージを選んで、`admin@example.com` と `developer@example.com` の両方にメールで送信します。 * 第二のターゲットは、名前が `yii\db\` で始まるカテゴリのエラーメッセージを選んで、`admin@example.com` と `developer@example.com` の両方にメールで送信します。
Yii は下記のログターゲットをあらかじめ内蔵しています。 Yii は下記のログターゲットをあらかじめ内蔵しています。
その構成方法と使用方法を学ぶためには、これらのクラスの API ドキュメントを参照してください。 その構成方法と使用方法を学ぶためには、これらのクラスの API ドキュメントを参照してください。
...@@ -111,8 +109,7 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶 ...@@ -111,8 +109,7 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶
### メッセージのフィルタリング <span id="message-filtering"></span> ### メッセージのフィルタリング <span id="message-filtering"></span>
全てのログターゲットについて、それぞれ、[[yii\log\Target::levels|levels]] と [[yii\log\Target::categories|categories]] 全てのログターゲットについて、それぞれ、[[yii\log\Target::levels|levels]] と [[yii\log\Target::categories|categories]] のプロパティを構成して、ターゲットが処理すべきメッセージの重要性レベルとカテゴリを指定することが出来ます。
のプロパティを構成して、ターゲットが処理すべきメッセージの重要性レベルとカテゴリを指定することが出来ます。
[[yii\log\Target::levels|levels]] プロパティは、次のレベルの一つまたは複数からなる配列を値として取ります。 [[yii\log\Target::levels|levels]] プロパティは、次のレベルの一つまたは複数からなる配列を値として取ります。
...@@ -133,13 +130,10 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶 ...@@ -133,13 +130,10 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶
[[yii\log\Target::categories|categories]] プロパティを指定しない場合は、ターゲットが *全ての* カテゴリのメッセージを処理することを意味します。 [[yii\log\Target::categories|categories]] プロパティを指定しない場合は、ターゲットが *全ての* カテゴリのメッセージを処理することを意味します。
カテゴリを [[yii\log\Target::categories|categories]] プロパティでホワイトリストとして登録する以外に、一定のカテゴリを [[yii\log\Target::except|except]] カテゴリを [[yii\log\Target::categories|categories]] プロパティでホワイトリストとして登録する以外に、一定のカテゴリを [[yii\log\Target::except|except]] プロパティによってブラックリストとして登録することも可能です。
プロパティによってブラックリストとして登録することも可能です。
カテゴリの名前がこの配列にあるか、または配列にあるパターンに合致する場合は、メッセージはターゲットによって処理されません。 カテゴリの名前がこの配列にあるか、または配列にあるパターンに合致する場合は、メッセージはターゲットによって処理されません。
次のターゲットの構成は、ターゲットが、`yii\db\*` または `yii\web\HttpException:*` 次のターゲットの構成は、ターゲットが、`yii\db\*` または `yii\web\HttpException:*` に合致するカテゴリ名を持つエラーおよび警告のメッセージだけを処理すべきこと、ただし、`yii\web\HttpException:404` は除外すべきことを指定するものです。
に合致するカテゴリ名を持つエラーおよび警告のメッセージだけを処理すべきこと、ただし、`yii\web\HttpException:404`
は除外すべきことを指定するものです。
```php ```php
[ [
...@@ -193,7 +187,7 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶 ...@@ -193,7 +187,7 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶
メッセージ前置情報以外にも、ログターゲットは、一群のログメッセージごとに一定のコンテキスト情報を追加します。 メッセージ前置情報以外にも、ログターゲットは、一群のログメッセージごとに一定のコンテキスト情報を追加します。
デフォルトでは、その情報には、次のグローバル PHP 変数、すなわち、`$_GET`、`$_POST`、`$_FILES`、`$_COOKIE`、`$_SESSION` および `$_SERVER` の値が含まれます。 デフォルトでは、その情報には、次のグローバル PHP 変数、すなわち、`$_GET`、`$_POST`、`$_FILES`、`$_COOKIE`、`$_SESSION` および `$_SERVER` の値が含まれます。
ログターゲットに含ませたいグローバル変数の名前を [[yii\log\Target::logVars]] プロパティに設定することによって、この動作を調整することが出来ます。 ログターゲットに含ませたいグローバル変数の名前を [[yii\log\Target::logVars]] プロパティに設定することによって、この動作を調整することが出来ます。
例えば、次のログターゲットの構成は、`$_SERVER` の値だけがログメッセージに追加されるように指定するものです。 例えば、次のログターゲットの構成は、`$_SERVER` の値だけをログメッセージに追加するように指定するものです。
```php ```php
[ [
...@@ -263,8 +257,7 @@ return [ ...@@ -263,8 +257,7 @@ return [
デフォルトの状態では、吐き出しとエクスポートの間隔の設定のために、`Yii::trace()` やその他のログ記録メソッドを呼んでも、ただちには、ログメッセージはログターゲットに出現しません。 デフォルトの状態では、吐き出しとエクスポートの間隔の設定のために、`Yii::trace()` やその他のログ記録メソッドを呼んでも、ただちには、ログメッセージはログターゲットに出現しません。
このことは、長時間にわたって走るコンソールアプリケーションでは、問題になる場合もあります。 このことは、長時間にわたって走るコンソールアプリケーションでは、問題になる場合もあります。
各ログメッセージがただちにログターゲットに出現するようにするためには、下記のように、[[yii\log\Dispatcher::flushInterval|flushInterval]] 各ログメッセージがただちにログターゲットに出現するようにするためには、下記のように、[[yii\log\Dispatcher::flushInterval|flushInterval]] と [[yii\log\Target::exportInterval|exportInterval]] の両方を 1 に設定しなければなりません。
と [[yii\log\Target::exportInterval|exportInterval]] の両方を 1 に設定しなければなりません。
```php ```php
return [ return [
...@@ -295,7 +288,8 @@ return [ ...@@ -295,7 +288,8 @@ return [
Yii::$app->log->targets['file']->enabled = false; Yii::$app->log->targets['file']->enabled = false;
``` ```
上記のコードを使うためには、下記のように、`targets` の配列で文字列のキーを使って、ターゲットを `file` という名前にする必要があります。 上記のコードでは、ターゲットが `file` という名前であることが必要とされています。
下記のように、`targets` の配列で文字列のキーを使ってターゲットの名前を指定して下さい。
```php ```php
return [ return [
...@@ -318,7 +312,7 @@ return [ ...@@ -318,7 +312,7 @@ return [
### 新しいターゲットを作る <span id="new-targets"></span> ### 新しいターゲットを作る <span id="new-targets"></span>
新しいログターゲットを作ることは非常に単純なことです。 新しいログターゲットを作ることは非常に簡単です。
必要なことは、主として、[[yii\log\Target::messages]] 配列の中身を指定された媒体に送出する [[yii\log\Target::export()]] メソッドを実装することです。 必要なことは、主として、[[yii\log\Target::messages]] 配列の中身を指定された媒体に送出する [[yii\log\Target::export()]] メソッドを実装することです。
各メッセージに書式を設定するためには、[[yii\log\Target::formatMessage()]] を呼ぶことが出来ます。 各メッセージに書式を設定するためには、[[yii\log\Target::formatMessage()]] を呼ぶことが出来ます。
詳細については、Yii リリースに含まれているログターゲットクラスのどれか一つを参照してください。 詳細については、Yii リリースに含まれているログターゲットクラスのどれか一つを参照してください。
...@@ -342,7 +336,7 @@ return [ ...@@ -342,7 +336,7 @@ return [
ここで `myBenchmark` はコードブロックを特定するユニークなトークンを表します。 ここで `myBenchmark` はコードブロックを特定するユニークなトークンを表します。
後でプロファイリング結果を検査するときに、このトークンを使って、対応するコードブロックによって消費された時間を調べます。 後でプロファイリング結果を検査するときに、このトークンを使って、対応するコードブロックによって消費された時間を調べます。
`beginProfile` と `endProfile` のペアが適正な入れ子になっているように確認することは、非常に重要なことです。 `beginProfile` と `endProfile` のペアが適正な入れ子になっていることを確認することが非常に重要なことです。
例えば、 例えば、
```php ```php
...@@ -357,8 +351,7 @@ return [ ...@@ -357,8 +351,7 @@ return [
\Yii::endProfile('block1'); \Yii::endProfile('block1');
``` ```
`\Yii::endProfile('block1')` を忘れたり、`\Yii::endProfile('block1')` と `\Yii::endProfile('block2')` `\Yii::endProfile('block1')` を忘れたり、`\Yii::endProfile('block1')` と `\Yii::endProfile('block2')` の順序を入れ替えたりすると、パフォーマンスプロファイリングは機能しません。
の順序を入れ替えたりすると、パフォーマンスプロファイリングは機能しません。
プロファイルされるコードブロックの全てについて、おのおの、重大性レベルが `profile` であるログメッセージが記録されます。 プロファイルされるコードブロックの全てについて、おのおの、重大性レベルが `profile` であるログメッセージが記録されます。
そのようなメッセージを集めてエクスポートする [ログターゲット](#log-targets) を構成してください。 そのようなメッセージを集めてエクスポートする [ログターゲット](#log-targets) を構成してください。
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment