Yii-logging

提供:Dev Guides
移動先:案内検索

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ディレクトリに表示されます。

アクションログ機能