Maison  >  Article  >  php教程  >  Explication détaillée de l'utilisation des journaux dans le didacticiel YII Framework

Explication détaillée de l'utilisation des journaux dans le didacticiel YII Framework

高洛峰
高洛峰original
2016-12-27 14:11:421282parcourir

L'exemple de cet article décrit l'utilisation du journal du framework YII Framework. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Le rôle des journaux (1000 mots sont omis ici)

Les journaux dans YII sont très bons et puissants, vous permettant de stocker les informations du journal dans la base de données. Envoyez-les à l'adresse e-mail désignée et stockez-les dans un fichier. La page d'affichage des opinions peut même être utilisée pour l'analyse des performances.

Configuration de base des logs dans YII :/yii_dev/testwebap/protected/config/main.php

'log'=>array(
  'class'=>'CLogRouter',
  'routes'=>array(
    array(
      'class'=>'CFileLogRoute',
      'levels'=>'error, warning',
    ),
    // uncomment the following to show log messages on web pages
    /*
    array(
      'class'=>'CWebLogRoute',
    ),
    */
  ),
),

Utilisation de base des logs dans YII :

Vous pouvez utiliser YII Yii::log et Yii::trace sont fournis pour afficher les informations du journal. La différence entre les deux peut être vue en regardant la définition.

Définition de la fonction

public static function trace($msg,$category='application')
{
  if(YII_DEBUG)
    self::log($msg,CLogger::LEVEL_TRACE,$category);
}
public static function log($msg,$level=CLogger::LEVEL_INFO,$category='application')
{
  if(self::$_logger===null)
    self::$_logger=new CLogger;
  if(YII_DEBUG && YII_TRACE_LEVEL>0 && $level!==CLogger::LEVEL_PROFILE)
  {
    $traces=debug_backtrace();
    $count=0;
    foreach($traces as $trace)
    {
      if(isset($trace['file'],$trace['line']) && strpos($trace['file'],YII_PATH)!==0)
      {
        $msg.="\nin ".$trace['file'].' ('.$trace['line'].')';
        if(++$count>=YII_TRACE_LEVEL)
          break;
      }
    }
  }
  self::$_logger->log($msg,$level,$category);
}

$msg : les informations du journal que vous souhaitez afficher

$category : la catégorie à laquelle appartiennent les informations du journal

$level : informations de journalisation Niveau :

const LEVEL_TRACE='trace' ; utilisé dans l'environnement de débogage, suivi du processus d'exécution du programme
const LEVEL_WARNING='warning' ; message d'avertissement
const LEVEL_ERROR='error'; ; message d'erreur fatale
const LEVEL_INFO='info' ; informations d'invite normales
const LEVEL_PROFILE='profile' ; informations de débogage des performances

Exemples d'utilisation de base

<?php
class DefaultController extends Controller
{
  public function actionCache ()
  {
    $category=&#39;system.testmod.defaultController&#39;;
    $level=CLogger::LEVEL_INFO;
    $msg=&#39;action begin &#39;;
    Yii::log($msg,$level,$category);
  }
}

Journal emplacement de sortie dans YII

Comme mentionné ci-dessus, l'emplacement de sortie des journaux dans YII peut être défini comme plusieurs emplacements. Principalement via la modification du fichier de configuration, par exemple :

&#39;log&#39;=>array(
  &#39;class&#39;=>&#39;CLogRouter&#39;,
  &#39;routes&#39;=>array(
    array(
      &#39;class&#39;=>&#39;CFileLogRoute&#39;,
      &#39;levels&#39;=>&#39;error, warning&#39;,
    ),
    // uncomment the following to show log messages on web pages
    array(
      &#39;class&#39;=>&#39;CWebLogRoute&#39;,
    ),
  ),
),

est non seulement affiché dans le fichier journal, mais également affiché sur la page Web.

Dans le fichier de configuration :

routes est utilisé pour configurer l'emplacement de la sortie du journal,
class est le journal, le nom de classe de la route du journal
levels est le haut niveau du journal, une séquence de chaînes, facile à utiliser et à diviser. Correspond spécifiquement aux constantes de CLooger

Remarque :

L'emplacement de stockage du fichier journal est :/yii_dev/testwebap/protected/runtime/application.log

Introduit par le journal officiel Il est très détaillé, mais la traduction chinoise de la seconde moitié manque, voici donc la traduction pour la compléter.

Yii fournit une fonction de journalisation flexible et évolutive. Les journaux enregistrés peuvent être classés par niveau de journal et classification des informations. En utilisant des filtres de niveau et de catégorie, les informations sélectionnées peuvent être acheminées vers différentes destinations, telles qu'un fichier, un e-mail, une fenêtre de navigateur, etc.

1. Enregistrement des informations

Les informations peuvent être enregistrées via Yii::log ou Yii::trace. La différence est que ce dernier n'enregistre les informations que lorsque l'application s'exécute en mode débogage.

Yii::log($message, $level, $category);
Yii::trace($message, $category);

Lors de l'enregistrement des informations, nous devons spécifier sa catégorie et son niveau. La catégorie est une chaîne avec un format similaire à l'alias du chemin. Par exemple, si un message est enregistré dans CController, nous pouvons utiliser system.web.CController comme classification. Le niveau d'information doit être l'une des valeurs suivantes :

trace : Il s'agit du niveau utilisé dans Yii::trace. Il est utilisé pour suivre le flux d’exécution d’un programme pendant le développement.
info : Ceci est utilisé pour enregistrer des informations communes.
profil : Ceci est un aperçu des performances (profil). Des instructions plus détaillées suivront sous peu.
avertissement : ceci est utilisé pour les informations d'avertissement.
erreur : Ceci est utilisé pour les messages d’erreur fatale.

2. Routage des informations

Les informations enregistrées via Yii::log ou Yii::trace sont stockées en mémoire. Nous devons généralement les afficher dans une fenêtre de navigateur ou les enregistrer dans un stockage persistant tel qu'un fichier ou un courrier électronique. C'est ce qu'on appelle le routage des messages, c'est-à-dire l'envoi de messages vers différentes destinations.

Dans Yii, le routage des informations est géré par un composant applicatif appelé CLogRouter. Il est responsable de la gestion d'une série de choses appelées routage des journaux. Chaque route de journal représente une destination de journal distincte. Les messages envoyés via une route de journaux sont filtrés par leur niveau et leur catégorie.

Pour utiliser le routage des messages, nous devons installer et précharger un composant applicatif CLogRouter. Nous devons également configurer son attribut routes pour les routes de journaux souhaitées. Le code ci-dessous montre un exemple de la configuration d'application requise :

array(
  ......
  &#39;preload&#39;=>array(&#39;log&#39;),
  &#39;components&#39;=>array(
    ......
    &#39;log&#39;=>array(
      &#39;class&#39;=>&#39;CLogRouter&#39;,
      &#39;routes&#39;=>array(
        array(
          &#39;class&#39;=>&#39;CFileLogRoute&#39;,
          &#39;levels&#39;=>&#39;trace, info&#39;,
          &#39;categories&#39;=>&#39;system.*&#39;,
        ),
        array(
          &#39;class&#39;=>&#39;CEmailLogRoute&#39;,
          &#39;levels&#39;=>&#39;error, warning&#39;,
          &#39;emails&#39;=>&#39;admin@example.com&#39;,
        ),
      ),
    ),
  ),
)

Dans l'exemple ci-dessus, nous avons défini deux routes de journaux. Le premier est CFileLogRoute, qui enregistre les informations dans un fichier situé dans le répertoire d'exécution de l'application. Et seules les informations avec trace de niveau ou informations et catégories commençant par système seront enregistrées. La deuxième route est CEmailLogRoute, qui enverra les informations à l'adresse e-mail spécifiée, et seules celles avec un niveau d'erreur ou d'avertissement seront envoyées.

Dans Yii, les routes de journaux suivantes sont disponibles :

CDbLogRoute : enregistre les informations dans une table de la base de données.
CEmailLogRoute : envoyer des informations à l'adresse e-mail spécifiée.
CFileLogRoute : enregistre les informations dans un fichier dans le répertoire d'exécution de l'application.
CWebLogRoute : Afficher les informations en bas de la page actuelle.
CProfileLogRoute : affiche les informations de profilage en bas de la page.

Information : le routage des informations se produit lorsque le dernier événement onEndRequest du cycle de requête en cours est déclenché. Pour terminer explicitement le processus de requête en cours, appelez CApplication::end() au lieu d'utiliser die() ou exit(), car CApplication::end() déclenchera l'événement onEndRequest afin que les informations soient enregistrées sans problème.

3. Filtrage des informations

正如我们所提到的,信息可以在他们被发送到一个日志路由之前通过它们的级别和分类过滤。 这是通过设置对应日志路由的 levels 和 categories 属性完成的。 多个级别或分类应使用逗号连接。

由于信息分类是类似 xxx.yyy.zzz 格式的,我们可以将其视为一个分类层级。 具体地,我们说 xxx 是 xxx.yyy的父级,而xxx.yyy 又是 xxx.yyy.zzz 的父级。 这样我们就可以使用 xxx.* 表示分类 xxx 及其所有的子级和孙级分类

4. 记录上下文信息

从版本 1.0.6 起,我们可以设置记录附加的上下文信息, 比如 PHP 的预定义变量(例如 $_GET, $_SERVER),session ID,用户名等。 这是通过指定一个日志路由的 CLogRoute::filter属性为一个合适的日志过滤规则实现的。

框架可能在许多数情况下会用到日志过滤器CLogFilter来过滤日志。默认情况下,CLogFilter日志消息包含了许多系统上下文信息的变量,像$ _GET,$_SERVER。 CLogFilter也可以配置的前缀与会话ID,用户名等,我们在检查无数记录的消息每个记录的消息时,这可能会极大地简化了搜索难度

下面的配置显示了如何启用日志记录的上下文信息。请注意,每个日志路由可能有其自己的日志过滤器。 默认情况下,日志路由不会有日志筛选器。

array(
  ......
  &#39;preload&#39;=>array(&#39;log&#39;),
  &#39;components&#39;=>array(
    ......
    &#39;log&#39;=>array(
      &#39;class&#39;=>&#39;CLogRouter&#39;,
      &#39;routes&#39;=>array(
        array(
          &#39;class&#39;=>&#39;CFileLogRoute&#39;,
          &#39;levels&#39;=>&#39;error&#39;,
          &#39;filter&#39;=>&#39;CLogFilter&#39;,
        ),
        ...other log routes...
      ),
    ),
  ),
)

从版本1.0.7开始,Yii的日志记录可以采用堆栈的方式记录消息,此功能默认是关闭的,因为它会降低性能。要使用此功能,只需在入口脚本(前includingyii.php)定义一个命名为YII_TRACE_LEVEL的常量即一个大于0的整数。 Yii将在堆栈信息中追加应用程序要到的每一个文件名和行号。可以通过设置YII_TRACE_LEVEL来设定堆栈的层数。这种方式在开发阶段特别有用,因为它可以帮助我们确定触发跟踪消息的地方。

5. Performance Profiling 性能分析

性能分析是一类特殊类型的消息记录。性能分析可用于测量指定代码块所需的时间,并找出性能瓶颈是什么。

要使用性能分析日志,我们需要确定哪些代码块需要分析。我们要在分析性能的代码短的开始和结尾添加如下方法:

Yii::beginProfile(&#39;blockID&#39;);
...code block being profiled...
Yii::endProfile(&#39;blockID&#39;);

其中blockID是一个标识代码块的唯一ID。

注意,这些方法不能交叉嵌套

为了显示分析结果,我们需要为CLogRouter增加CProfileLogRoute路由。然后通过CProfileLogRoute可以把性能测试结果显示在当前页面结束。

6. Profiling SQL Executions 分析SQL执行

在数据库开发中分析是特别有用的,因为SQL执行往往是应用程序的主要性能瓶颈。尽管我们可以手动在每个SQL执行的适当的地方插入beginProfile和endProfile来衡量花费的时间,但从1.0.6版本开始,Yii提供了更系统的方法来解决这个问题。

再实际的应用程序当中通过设置CDbConnection::enableProfiling爱分析每一个正在执行的SQL语句。使用 CProfileLogRoute,结果可以很容易地显示。它可以显示我们是在执行什么SQL语句花费多少时间。我们也可以调用CDbConnection:getStats()来分析检索SQL语句的执行总数和其总的执行时间。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

更多YII Framework框架教程之日志用法详解相关文章请关注PHP中文网!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn