Yii - Registro

Yii proporciona un marco altamente personalizable y extensible. Con la ayuda de este marco, puede registrar fácilmente varios tipos de mensajes.

Para registrar un mensaje, debe llamar a uno de los siguientes métodos:

  • Yii::error() - Registra un mensaje de error fatal.

  • Yii::warning() - Graba un mensaje de advertencia.

  • Yii::info() - Graba un mensaje con información útil.

  • Yii::trace() - Registra un mensaje para rastrear cómo se ejecuta un fragmento de código.

Los métodos anteriores registran mensajes de registro en varias categorías. Comparten la siguiente firma de función:

function ($message, $category = 'application')

donde -

  • $message - El mensaje de registro que se grabará

  • $category - La categoría del mensaje de registro

Una forma simple y conveniente de nombrar el esquema es usar la constante mágica PHP __METHOD__. Por ejemplo

Yii::info('this is a log message', __METHOD__);

Un objetivo de registro es una instancia de la clase yii \ log \ Target. Filtra todos los mensajes de registro por categorías y los exporta a archivos, bases de datos y / o correo electrónico.

Step 1 - También puede registrar varios destinos de registro, como.

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',
               ],
            ],
         ],
      ],
   ],
];

En el código anterior, se registran dos objetivos. El primer objetivo selecciona todos los errores, advertencias, seguimientos y mensajes de información y los guarda en una base de datos. El segundo objetivo envía todos los mensajes de error y advertencia al correo electrónico del administrador.

Yii proporciona los siguientes objetivos de registro integrados:

  • yii\log\DbTarget - Almacena mensajes de registro en una base de datos.

  • yii\log\FileTarget - Guarda mensajes de registro en archivos.

  • yii\log\EmailTarget - Envía mensajes de registro a direcciones de correo electrónico predefinidas.

  • yii\log\SyslogTarget - Guarda los mensajes de registro en syslog llamando a la función PHP syslog ().

De forma predeterminada, los mensajes de registro tienen el siguiente formato:

Timestamp [IP address][User ID][Session ID][Severity Level][Category] Message Text

Step 2 - Para personalizar este formato, debe configurar el yii\log\Target::$prefixpropiedad. Por ejemplo.

[
   '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]";
   }
]

El fragmento de código anterior configura un destino de registro para prefijar todos los mensajes de registro con el ID de usuario actual.

De forma predeterminada, los mensajes de registro incluyen los valores de estas variables PHP globales: $ _GET, $ _POST, $ _SESSION, $ _COOKIE, $ _FILES y $ _SERVER. Para modificar este comportamiento, debe configurar elyii\log\Target::$logVars propiedad con los nombres de las variables que desea incluir.

El objeto registrador mantiene todos los mensajes de registro en una matriz. El objeto del registrador descargó los mensajes grabados en los destinos del registro cada vez que la matriz acumula una cierta cantidad de mensajes (el valor predeterminado es 1000).

Step 3 - Para personalizar este número, debe llamar al flushInterval property.

return [
   'bootstrap' => ['log'],
   'components' => [
      'log' => [
         'flushInterval' => 50, // default is 1000
         'targets' => [...],
      ],
   ],
];

Incluso cuando el objeto del registrador descarga los mensajes de registro en los objetivos de registro, no se exportan inmediatamente. La exportación se produce cuando un destino de registro acumula una determinada cantidad de mensajes (el valor predeterminado es 1000).

Step 4 - Para personalizar este número, debe configurar el exportInterval propiedad.

[
   'class' => 'yii\log\FileTarget',
   'exportInterval' => 50, // default is 1000
]

Step 5 - Ahora, modifique el config/web.php archivar de esta manera.

<?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;
?>

En el código anterior, definimos el componente de la aplicación de registro, establecemos el flushInterval y exportIntevalproperties a 1 para que todos los mensajes de registro aparezcan en los archivos de registro inmediatamente. También omitimos la propiedad de niveles del objetivo de registro. Significa que los mensajes de registro de todas las categorías (error, advertencia, información, seguimiento) aparecerán en los archivos de registro.

Step 6 - Luego, cree una función llamada actionLog () en SiteController.

public function actionLog() {
   Yii::trace('trace log message');
   Yii::info('info log message');
   Yii::warning('warning log message');
   Yii::error('error log message');
}

En el código anterior, solo escribimos cuatro mensajes de registro de diferentes categorías en los archivos de registro.

Step 7 - Escriba la URL http://localhost:8080/index.php?r=site/logen la barra de direcciones del navegador web. Los mensajes de registro deben aparecer en el directorio app / runtime / logs en el archivo app.log.