Commit 93b587c3 by Nobuo Kihara

docs/guide-ja/runtime-logging.md - WIP [ci skip]

parent 742d9ffe
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
======== ========
Yii は高度なカスタマイズ性と拡張性を持った強力なロギングフレームワークを提供しています。このフレームワークを使用すると、 Yii は高度なカスタマイズ性と拡張性を持った強力なロギングフレームワークを提供しています。このフレームワークを使用すると、
さまざまな種類のメッセージを記録し、フィルターして、ファイル、データベース、メールなど、さまざまなターゲットに収集することが簡単に出来ます。 さまざまな種類のメッセージを記録し、フィルタして、ファイル、データベース、メールなど、さまざまなターゲットに収集することが簡単に出来ます。
Yii のロギングフレームワークを使うためには、下記のステップを踏みます。 Yii のロギングフレームワークを使うためには、下記のステップを踏みます。
* コードのさまざまな場所で [ログメッセージ](#log-messages) を記録する。 * コードのさまざまな場所で [ログメッセージ](#log-messages) を記録する。
* アプリケーションのコンフィギュレーションで [ログターゲット](#log-targets) を構成して、ログメッセージをフィルターしてエクスポートする。 * アプリケーションのコンフィギュレーションで [ログターゲット](#log-targets) を構成して、ログメッセージをフィルタしてエクスポートする。
* さまざまなターゲット (例えば [Yii デバッガ](tool-debugger.md)) によって、フィルターされエクスポートされたログメッセージを調査する。 * さまざまなターゲット (例えば [Yii デバッガ](tool-debugger.md)) によって、フィルタされエクスポートされたログメッセージを調査する。
この節では、主として最初の二つのステップについて説明します。 この節では、主として最初の二つのステップについて説明します。
...@@ -22,52 +22,51 @@ Yii 縺ョ繝ュ繧ョ繝ウ繧ー繝輔Ξ繝シ繝繝ッ繝シ繧ッ繧剃スソ縺◆繧√↓縺ッ縲∽ク玖ィ倥繧ケ繝 ...@@ -22,52 +22,51 @@ Yii 縺ョ繝ュ繧ョ繝ウ繧ー繝輔Ξ繝シ繝繝ッ繝シ繧ッ繧剃スソ縺◆繧√↓縺ッ縲∽ク玖ィ倥繧ケ繝
* [[Yii::warning()]]: 何か予期しないことが発生したことを示す警告メッセージを記録します。 * [[Yii::warning()]]: 何か予期しないことが発生したことを示す警告メッセージを記録します。
* [[Yii::error()]]: 出来るだけ早急に調査すべき致命的なエラーを記録します。 * [[Yii::error()]]: 出来るだけ早急に調査すべき致命的なエラーを記録します。
These logging methods record log messages at various *severity levels* and *categories*. They share これらのログ記録メソッドは、ログメッセージをさまざまな *重大性レベル**カテゴリ* で記録するものです。
the same function signature `function ($message, $category = 'application')`, where `$message` stands for これらのメソッドは `function ($message, $category = 'application')` という関数シグニチャを共有しており、`$message`
the log message to be recorded, while `$category` is the category of the log message. The code in the following は記録されるログメッセージを示し、`$category` はログメッセージのカテゴリを示します。
example records a trace message under the default category `application`: 次のコードサンプルは、トレースメッセージをデフォルトのカテゴリである `application` の下に記録するものです。
```php ```php
Yii::trace('start calculating average revenue'); Yii::trace('平均収益の計算を開始');
``` ```
> Info: Log messages can be strings as well as complex data, such as arrays or objects. It is the responsibility > Info|情報: ログメッセージは文字列でも、配列やオブジェクトのような複雑なデータでも構いません。
of [log targets](#log-targets) to properly deal with log messages. By default, if a log message is not a string, ログメッセージを適切に取り扱うのは [ログターゲット](#log-targets) の責任です。
it will be exported as a string by calling [[yii\helpers\VarDumper::export()]]. 既定では、ログメッセージが文字列でない場合は、[[yii\helpers\VarDumper::export()]] が呼ばれて文字列に変換されることになります。
To better organize and filter log messages, it is recommended that you specify an appropriate category for each ログメッセージを上手に整理しフィルタするために、すべてのログメッセージにそれぞれ適切なカテゴリを指定することが推奨されます。
log message. You may choose a hierarchical naming scheme for categories, which will make it easier for カテゴリに階層的な命名方法を採用すると、[ログターゲット](#log-targets) がカテゴリに基づいてメッセージをフィルタすることが容易になります。
[log targets](#log-targets) to filter messages based on their categories. A simple yet effective naming scheme 簡単でしかも効果的な命名方法は、カテゴリ名に PHP のマジック定数 `__METHOD__` を使用することです。
is to use the PHP magic constant `__METHOD__` for the category names. This is also the approach used in the core これは、Yii フレームワークのコアコードでも使われている方法です。例えば、
Yii framework code. For example,
```php ```php
Yii::trace('start calculating average revenue', __METHOD__); Yii::trace('平均収益の計算を開始', __METHOD__);
``` ```
The `__METHOD__` constant evaluates as the name of the method (prefixed with the fully qualified class name) where `__METHOD__` という定数は、それが出現する場所のメソッド名 (完全修飾のクラス名が前置されます) として評価されます。
the constant appears. For example, it is equal to the string `'app\controllers\RevenueController::calculate'` if 例えば、上記のコードが `app\controllers\RevenueController::calculate` というメソッドの中で呼ばれている場合は、
the above line of code is called within this method. `__METHOD__``'app\controllers\RevenueController::calculate'` という文字列と同じになります。
> Info: The logging methods described above are actually shortcuts to the [[yii\log\Logger::log()|log()]] method > Info|情報: 上記で説明したメソッドは、実際には、[[yii\log\Logger|ロガーオブジェクト]] の [[yii\log\Logger::log()|log()]] メソッドへのショートカットです。
of the [[yii\log\Logger|logger object]] which is a singleton accessible through the expression `Yii::getLogger()`. When [[yii\log\Logger|ロガーオブジェクト]] は `Yii::getLogger()` という式でアクセス可能なシングルトンです。
enough messages are logged or when the application ends, the logger object will call a ロガーオブジェクトは、十分な量のメッセージが記録されたとき、または、アプリケーションが終了するときに、[[yii\log\Dispatcher|メッセージディスパッチャ]]
[[yii\log\Dispatcher|message dispatcher]] to send recorded log messages to the registered [log targets](#log-targets). を呼んで、登録された [ログターゲット](#log-targets) に記録されたログメッセージを送信します。
## Log Targets <a name="log-targets"></a> ## ログターゲット <a name="log-targets"></a>
A log target is an instance of the [[yii\log\Target]] class or its child class. It filters the log messages by their ログターゲットは [[yii\log\Target]] クラスまたはその子クラスのインスタンスです。ログターゲットは、
severity levels and categories and then exports them to some medium. For example, a [[yii\log\DbTarget|database target]] ログメッセージを重大性レベルとカテゴリによってフィルタして、何らかの媒体にエクスポートします。
exports the filtered log messages to a database table, while an [[yii\log\EmailTarget|email target]] exports 例えば、[[yii\log\DbTarget|データベースターゲット]] は、フィルタされたログメッセージをデータベーステーブルにエクスポートし、
the log messages to specified email addresses. [[yii\log\EmailTarget|メールターゲット]] は、ログメッセージを指定されたメールアドレスにエクスポートします。
You can register multiple log targets in an application by configuring them through the `log` [application component](structure-application-components.md) 一つのアプリケーションの中で複数のログターゲットを登録することが出来ます。そのためには、次のように、
in the application configuration, like the following: アプリケーションのコンフィギュレーションの中で、`log` [アプリケーションコンポーネント](structure-application-components.md) によってログターゲットを構成します。
```php ```php
return [ return [
// the "log" component must be loaded during bootstrapping time // "log" コンポーネントはブートストラップ時にロードされなければならない
'bootstrap' => ['log'], 'bootstrap' => ['log'],
'components' => [ 'components' => [
...@@ -93,59 +92,58 @@ return [ ...@@ -93,59 +92,58 @@ return [
]; ];
``` ```
> Note: The `log` component must be loaded during [bootstrapping](runtime-bootstrapping.md) time so that > Note|注意: `log` コンポーネントは、ログメッセージをターゲットに即座に送付することが出来るように、
it can dispatch log messages to targets promptly. That is why it is listed in the `bootstrap` array as shown above. [ブートストラップ](runtime-bootstrapping.md) 時にロードされなければなりません。
この理由により、上記の例で示されているように、`bootstrap` の配列に `log` をリストアップしています。
In the above code, two log targets are registered in the [[yii\log\Dispatcher::targets]] property: 上記のコードでは、二つのログターゲットが [[yii\log\Dispatcher::targets]] プロパティに登録されています。
* the first target selects error and warning messages and saves them in a database table; * 最初のターゲットは、エラーと警告のメッセージを選択して、データベーステーブルに保存します。
* the second target selects error messages under the categories whose names start with `yii\db\`, and sends * 第二のターゲットは、名前が `yii\db\` で始まるカテゴリの下のエラーメッセージを選んで、
them in an email to both `admin@example.com` and `developer@example.com`. `admin@example.com` と `developer@example.com` の両方にメールで送信します。
Yii comes with the following built-in log targets. Please refer to the API documentation about these classes to Yii は下記のログターゲットをあらかじめ内蔵しています。その構成方法と使用方法を学ぶためには、
learn how to configure and use them. これらのクラスの API ドキュメントを参照してください。
* [[yii\log\DbTarget]]: stores log messages in a database table. * [[yii\log\DbTarget]]: ログメッセージをデータベーステーブルに保存する。
* [[yii\log\EmailTarget]]: sends log messages to pre-specified email addresses. * [[yii\log\EmailTarget]]: ログメッセージを事前に指定されたメールアドレスに送信する。
* [[yii\log\FileTarget]]: saves log messages in files. * [[yii\log\FileTarget]]: ログメッセージをファイルに保存する。
* [[yii\log\SyslogTarget]]: saves log messages to syslog by calling the PHP function `syslog()`. * [[yii\log\SyslogTarget]]: ログメッセージを PHP 関数 `syslog()` を呼んでシステムログに保存する。
In the following, we will describe the features common to all log targets. 以下では、全てのターゲットに共通する機能について説明します。
### Message Filtering <a name="message-filtering"></a> ### メッセージのフィルタリング <a name="message-filtering"></a>
For each log target, you can configure its [[yii\log\Target::levels|levels]] and 全てのログターゲットについて、それぞれ、[[yii\log\Target::levels|levels]] と [[yii\log\Target::categories|categories]]
[[yii\log\Target::categories|categories]] properties to specify which severity levels and categories of the messages the target should process. のプロパティを構成して、ターゲットが処理すべきメッセージの重要性レベルとカテゴリを指定することが出来ます。
The [[yii\log\Target::levels|levels]] property takes an array consisting of one or several of the following values: [[yii\log\Target::levels|levels]] プロパティは、次のレベルの一つまたは複数からなる配列を値として取ります。
* `error`: corresponding to messages logged by [[Yii::error()]]. * `error`: [[Yii::error()]] によって記録されたメッセージに対応。
* `warning`: corresponding to messages logged by [[Yii::warning()]]. * `warning`: [[Yii::warning()]] によって記録されたメッセージに対応。
* `info`: corresponding to messages logged by [[Yii::info()]]. * `info`: [[Yii::info()]] によって記録されたメッセージに対応。
* `trace`: corresponding to messages logged by [[Yii::trace()]]. * `trace`: [[Yii::trace()]] によって記録されたメッセージに対応。
* `profile`: corresponding to messages logged by [[Yii::beginProfile()]] and [[Yii::endProfile()]], which will * `profile`: [[Yii::beginProfile()]] と [[Yii::endProfile()]] によって記録されたメッセージに対応。
be explained in more details in the [Profiling](#performance-profiling) subsection. これについては、[プロファイリング](#performance-profiling) の項で詳細に説明します。
If you do not specify the [[yii\log\Target::levels|levels]] property, it means the target will process messages [[yii\log\Target::levels|levels]] プロパティを指定しない場合は、ターゲットが *全ての* 重大性レベルのメッセージを処理することを意味します。
of *any* severity level.
The [[yii\log\Target::categories|categories]] property takes an array consisting of message category names or patterns. [[yii\log\Target::categories|categories]] プロパティは、メッセージカテゴリの名前またはパターンからなる配列を値として取ります。
A target will only process messages whose category can be found or match one of the patterns in this array. ターゲットは、カテゴリの名前がこの配列にあるか、または配列にあるパターンに合致する場合にだけ、メッセージを処理します。
A category pattern is a category name prefix with an asterisk `*` at its end. A category name matches a category pattern カテゴリパターンというのは、最後にアスタリスク `*` を持つカテゴリ名接頭辞です。カテゴリ名は、パターンと同じ接頭辞で始まる場合に、カテゴリパターンに合致します。
if it starts with the same prefix of the pattern. For example, `yii\db\Command::execute` and `yii\db\Command::query` 例えば、`yii\db\Command::execute` と `yii\db\Command::query` は、[[yii\db\Command]] クラスで記録されるログメッセージのためのカテゴリ名です。
are used as category names for the log messages recorded in the [[yii\db\Command]] class. They both match そして、両者は共に `yii\db\*` というパターンに合致します。
the pattern `yii\db\*`.
If you do not specify the [[yii\log\Target::categories|categories]] property, it means the target will process [[yii\log\Target::categories|categories]] プロパティを指定しない場合は、ターゲットが *全ての* カテゴリのメッセージを処理することを意味します。
messages of *any* category.
Besides whitelisting the categories by the [[yii\log\Target::categories|categories]] property, you may also カテゴリを [[yii\log\Target::categories|categories]] プロパティでホワイトリストとして登録する以外に、一定のカテゴリを [[yii\log\Target::except|except]]
blacklist certain categories by the [[yii\log\Target::except|except]] property. If the category of a message プロパティによってブラックリストとして登録することも可能です。
is found or matches one of the patterns in this property, it will NOT be processed by the target. カテゴリの名前がこの配列にあるか、または配列にあるパターンに合致する場合は、メッセージはターゲットによって処理されません。
The following target configuration specifies that the target should only process error and warning messages 次のターゲットのコンフィギュレーションは、ターゲットが、`yii\db\*` または `yii\web\HttpException:*`
under the categories whose names match either `yii\db\*` or `yii\web\HttpException:*`, but not `yii\web\HttpException:404`. に合致するカテゴリ名を持つエラーおよび警告のメッセージだけを処理すべきこと、ただし、`yii\web\HttpException:404`
は除外すべきことを指定するものです。
```php ```php
[ [
...@@ -161,9 +159,9 @@ under the categories whose names match either `yii\db\*` or `yii\web\HttpExcepti ...@@ -161,9 +159,9 @@ under the categories whose names match either `yii\db\*` or `yii\web\HttpExcepti
] ]
``` ```
> Info: When an HTTP exception is caught by the [error handler](runtime-handling-errors.md), an error message > Info|情報: HTTP 例外が [エラーハンドラ](runtime-handling-errors.md) によって捕捉されたときは、
will be logged with the category name in the format of `yii\web\HttpException:ErrorCode`. For example, `yii\web\HttpException:ErrorCode` という書式のカテゴリ名でエラーメッセージがログに記録されます。
the [[yii\web\NotFoundHttpException]] will cause an error message of category `yii\web\HttpException:404`. 例えば、[[yii\web\NotFoundHttpException]] は、`yii\web\HttpException:404` というカテゴリのエラーメッセージを発生させます。
### Message Formatting <a name="message-formatting"></a> ### Message Formatting <a name="message-formatting"></a>
......
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