Yii-logging
Yii-ロギング
Yiiは、高度にカスタマイズ可能で拡張可能なフレームワークを提供します。 このフレームワークを使用すると、さまざまなタイプのメッセージを簡単に記録できます。
メッセージを記録するには、次の方法のいずれかを呼び出す必要があります-
- * Yii :: error()*-致命的なエラーメッセージを記録します。
- * Yii :: warning()*-警告メッセージを記録します。
- * Yii :: info()*-いくつかの有用な情報を含むメッセージを記録します。
- * Yii :: trace()*-メッセージを記録して、コードの実行方法を追跡します。
上記のメソッドは、さまざまなカテゴリでログメッセージを記録します。 彼らは次の関数シグネチャを共有します-
function ($message, $category = 'application')
ここで-
- $ message -記録されるログメッセージ
- $ category -ログメッセージのカテゴリ
命名スキームの簡単で便利な方法は、PHP METHODマジック定数を使用することです。 たとえば-
Yii::info('this is a log message', __METHOD__);
ログターゲットは、yii \ log \ Targetクラスのインスタンスです。 すべてのログメッセージをカテゴリ別にフィルタリングし、ファイル、データベース、または電子メールにエクスポートします。
- ステップ1 *-複数のログターゲットも同様に登録できます。
return [
//the "log" component is loaded during bootstrapping time
'bootstrap' => ['log'],
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\DbTarget',
'levels' => ['error', 'warning', 'trace', 'info'],
],
[
'class' => 'yii\log\EmailTarget',
'levels' => ['error', 'warning'],
'categories' => ['yii\db\*'],
'message' => [
'from' => ['[email protected]'],
'to' => ['[email protected]', '[email protected]'],
'subject' => 'Application errors at mydomain.com',
],
],
],
],
],
];
上記のコードでは、2つのターゲットが登録されています。 最初のターゲットは、すべてのエラー、警告、トレース、および情報メッセージを選択し、データベースに保存します。 2番目のターゲットは、すべてのエラーおよび警告メッセージを管理者の電子メールに送信します。
Yiiは次の組み込みログターゲットを提供します-
- yii \ log \ DbTarget -ログメッセージをデータベースに保存します。
- yii \ log \ FileTarget -ログメッセージをファイルに保存します。
- yii \ log \ EmailTarget -定義済みの電子メールアドレスにログメッセージを送信します。
- yii \ log \ SyslogTarget -PHPを呼び出してログメッセージをsyslogに保存します 関数syslog()。
デフォルトでは、ログメッセージは次のようにフォーマットされています-
Timestamp [IP address][User ID][Session ID][Severity Level][Category] Message Text
- *ステップ2 *-この形式をカスタマイズするには、 *yii \ log \ Target
- $ prefix* プロパティを設定する必要があります。 例えば。
[
'class' => 'yii\log\FileTarget',
'prefix' => function ($message) {
$user = Yii::$app->has('user', true) ? Yii::$app->get('user') :
'undefined user';
$userID = $user ? $user->getId(false) : 'anonym';
return "[$userID]";
}
]
上記のコードスニペットは、すべてのログメッセージの前に現在のユーザーIDを付けるようにログターゲットを構成します。
- デフォルトでは、ログメッセージには、これらのグローバルPHP変数$ _GET、$ _ POST、$ _ SESSION、$ _ COOKIE、$ _ FILES、および$ _SERVERの値が含まれます。 この動作を変更するには、含める変数の名前で *yii \ log \ Target
- $ logVars* プロパティを構成する必要があります。
すべてのログメッセージは、ロガーオブジェクトによって配列に保持されます。 ロガーオブジェクトは、配列が特定の数のメッセージ(デフォルトは1000)を蓄積するたびに、記録されたメッセージをログターゲットにフラッシュしました。
ステップ3 *-この数値をカスタマイズするには、 flushIntervalプロパティ*を呼び出す必要があります。
return [
'bootstrap' => ['log'],
'components' => [
'log' => [
'flushInterval' => 50,//default is 1000
'targets' => [...],
],
],
];
ロガーオブジェクトがログメッセージをログターゲットにフラッシュしても、それらはすぐにはエクスポートされません。 エクスポートは、ログターゲットが特定の数のメッセージを蓄積するときに発生します(デフォルトは1000)。
ステップ4 *-この数値をカスタマイズするには、 *exportInterval プロパティを構成する必要があります。
[
'class' => 'yii\log\FileTarget',
'exportInterval' => 50,//default is 1000
]
ステップ5 *-次に、 *config/web.php ファイルをこの方法で変更します。
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'components' => [
'request' => [
//!!! insert a secret key in the following (if it is empty) - this
//is required by cookie validation
'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
//send all mails to a file by default. You have to set
//'useFileTransport' to false and configure a transport
//for the mailer to send real emails.
'useFileTransport' => true,
],
'log' => [
'flushInterval' => 1,
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'exportInterval' => 1,
'logVars' => []
],
],
],
'db' => require(__DIR__ . '/db.php'),
],
'modules' => [
'hello' => [
'class' => 'app\modules\hello\Hello',
],
],
'params' => $params,
];
if (YII_ENV_DEV) {
//configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
return $config;
?>
上記のコードでは、ログアプリケーションコンポーネントを定義し、 flushInterval および exportInteval プロパティを1に設定して、すべてのログメッセージがログファイルにすぐに表示されるようにします。 また、ログターゲットのレベルプロパティも省略します。 つまり、すべてのカテゴリ(エラー、警告、情報、トレース)のログメッセージがログファイルに表示されます。
- ステップ6 *-次に、SiteControllerでactionLog()という関数を作成します。
public function actionLog() {
Yii::trace('trace log message');
Yii::info('info log message');
Yii::warning('warning log message');
Yii::error('error log message');
}
上記のコードでは、異なるカテゴリの4つのログメッセージをログファイルに書き込むだけです。
ステップ7 *-WebブラウザーのアドレスバーにURL *http://localhost:8080/index.php?r = site/log を入力します。 ログメッセージは、app.logファイルのapp/runtime/logsディレクトリに表示されます。