Maison  >  Article  >  cadre php  >  Système de journalisation dans le framework Yii : enregistrement des événements d'application

Système de journalisation dans le framework Yii : enregistrement des événements d'application

WBOY
WBOYoriginal
2023-06-21 15:42:301112parcourir

Dans le framework Yii, il existe un système de journalisation complet qui peut enregistrer les événements d'application afin que les développeurs puissent effectuer le débogage et l'analyse des performances. Cet article présentera l'utilisation de base du système de journalisation dans le framework Yii et quelques techniques pratiques.

  1. Configuration du composant de journal

Le framework Yii utilise des fichiers comme méthode de stockage des journaux par défaut, et vous pouvez configurer le composant de journal dans le fichier de configuration. Voici un exemple de configuration simple :

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        [
            'class' => 'yiilogFileTarget',
            'levels' => ['error', 'warning'],
            'logFile' => '@runtime/logs/app.log',
        ],
    ],
],

Parmi eux, traceLevel fait référence au niveau de journalisation enregistré par le framework Yii en mode debug, le plus le niveau est élevé, plus les informations détaillées sont enregistrées. targets est un tableau qui peut configurer plusieurs cibles de journal. Dans cet exemple, il n'y a qu'une seule cible, qui consiste à écrire le niveau erreur et avertissement. se connecte au fichier @runtime/logs/app.log. traceLevel是指Yii框架在debug模式下记录的日志级别,越高则记录的信息越详细。targets是一个数组,可以配置多个日志目标,本例中只有一个目标,即将errorwarning级别的日志写入@runtime/logs/app.log文件。

  1. 记录日志信息

在代码中记录日志信息很简单,可以使用Yii框架提供的快捷函数,例如:

Yii::info('This is an info message.');
Yii::warning('This is a warning message.');
Yii::error('This is an error message.');

快捷函数中,infowarningerror分别对应日志的三个级别。可以根据情况选择使用。

在记录日志时,除了直接记录字符串以外,还可以使用可替换的数据,使用占位符{}表示。例如:

Yii::info('User {username} registered successfully.', ['username' => 'John']);

此时,{username}将被替换为'John'。这样的好处是日志信息更加详细,更易于排查问题。

  1. 使用上下文信息

Yii框架的日志系统支持使用上下文信息来记录更详细的日志信息。上下文信息包括了一些额外的数据,例如当前用户的信息、请求参数等等。在记录日志时,可以通过设置$context参数来添加上下文信息,例如:

Yii::warning('Invalid user input', ['category' => 'appcontrollersMyController', 'action' => 'create', 'params' => $_POST]);

在上述代码中,我们使用了3个上下文信息,分别是所属的控制器类、请求的方法和请求参数。这样就可以更加清晰地了解日志发生的位置以及具体的请求信息。

  1. 过滤和分类

在实际应用中,我们可能并不希望记录所有的日志信息。Yii框架的日志系统提供了过滤和分类的机制,可以根据条件过滤和分类日志消息。

在配置中,可以设置categories属性来分类日志消息,例如:

'log' => [
    'targets' => [
        [
            'class' => 'yiilogFileTarget',
            'categories' => ['appcontrollersMyController'],
            'logFile' => '@runtime/logs/mycontroller.log',
        ],
    ],
],

在上述配置中,我们只记录来自appcontrollersMyController控制器的日志信息,并将它们写入@runtime/logs/mycontroller.log文件。

除了分类之外,我们还可以使用函数过滤日志消息,例如:

'log' => [
    'targets' => [
        [
            'class' => 'yiilogFileTarget',
            'levels' => ['error'],
            'logFile' => '@runtime/logs/app.log',
            'logVars' => [],
            'except' => [
                'yiiwebHttpException:404',
            ],
        ],
    ],
],

在上述配置中,我们只记录error级别的日志信息,同时忽略了所有的上下文信息。我们使用了except属性来指定要忽略的日志消息。在此例中,我们忽略了所有的404错误信息。

  1. 自定义日志目标

Yii框架的日志系统允许我们自定义日志目标,例如将日志消息发送到email、数据库或者第三方日志服务等等。需要自定义日志目标时,我们需要继承yiilogTarget类,并实现export方法。例如:

class EmailTarget extends yiilogTarget
{
    public $to;

    public function export()
    {
        foreach ($this->messages as $message) {
            mail($this->to, $message[0], $message[1]);
        }
    }
}

在上述代码中,我们定义了一个自定义的邮件目标,并实现了export方法。在export方法中,我们使用mail

    Enregistrer les informations du journal

    L'enregistrement des informations du journal dans le code est très simple. Vous pouvez utiliser les fonctions de raccourci fournies par Yii. framework, tel que :

    rrreee

    Dans la fonction raccourci, info, warning et error correspondent aux trois niveaux de journaux respectivement. Vous pouvez choisir de l'utiliser en fonction de la situation.

    #🎜🎜#Lors de l'enregistrement de journaux, en plus d'enregistrer directement des chaînes, vous pouvez également utiliser des données remplaçables, représentées par des espaces réservés {}. Par exemple : #🎜🎜#rrreee#🎜🎜#À ce moment, {username} sera remplacé par « John ». L'avantage est que les informations du journal sont plus détaillées et permettent de résoudre plus facilement les problèmes. #🎜🎜#
      #🎜🎜#Utiliser des informations contextuelles #🎜🎜##🎜🎜##🎜🎜#Le système de journalisation du framework Yii prend en charge l'utilisation d'informations contextuelles pour enregistrer des informations de journal plus détaillées. Les informations contextuelles incluent des données supplémentaires, telles que les informations sur l'utilisateur actuel, les paramètres de demande, etc. Lors de l'enregistrement des logs, vous pouvez ajouter des informations contextuelles en définissant le paramètre $context, par exemple : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous utilisons 3 informations contextuelles, à savoir l'appartenance au contrôleur classe, méthode de requête et paramètres de requête. Cela permettra de mieux comprendre où se trouvent les journaux et les informations spécifiques de la demande. #🎜🎜#
        #🎜🎜#Filtrage et classification#🎜🎜##🎜🎜##🎜🎜#Dans les applications pratiques, nous ne souhaitons peut-être pas enregistrer toutes les informations du journal. Le système de journalisation du framework Yii fournit un mécanisme de filtrage et de classification qui peut filtrer et classer les messages de journal en fonction de conditions. #🎜🎜##🎜🎜#Dans la configuration, vous pouvez définir l'attribut categories pour classer les messages de journal, par exemple : #🎜🎜#rrreee#🎜🎜#Dans la configuration ci-dessus, nous enregistrons uniquement messages provenant des informations du journal du contrôleur appcontrollersMyController et écrivez-les dans le fichier @runtime/logs/mycontroller.log. #🎜🎜##🎜🎜#En plus de la classification, nous pouvons également utiliser des fonctions pour filtrer les messages du journal, par exemple : #🎜🎜#rrreee#🎜🎜#Dans la configuration ci-dessus, nous enregistrons uniquement l'erreur code> informations de journal au niveau, tout en ignorant toutes les informations contextuelles. Nous utilisons l'attribut <code>sauf pour spécifier les messages de journal à ignorer. Dans cet exemple, nous ignorons tous les messages d'erreur 404. #🎜🎜#
          #🎜🎜#Cible de journal personnalisée#🎜🎜##🎜🎜##🎜🎜#Le système de journalisation du framework Yii nous permet de personnaliser la cible du journal, comme l'envoi de messages de journal vers un e-mail, une base de données ou un service de journalisation tiers, etc. Lorsque nous devons personnaliser la cible du journal, nous devons hériter de la classe yiilogTarget et implémenter la méthode export. Par exemple : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous définissons une cible d'e-mail personnalisée et implémentons la méthode export. Dans la méthode export, nous utilisons la fonction mail pour envoyer le message de journal à la boîte aux lettres spécifiée. #🎜🎜##🎜🎜#Dans les applications pratiques, nous pouvons écrire différentes cibles de journaux selon les besoins pour répondre aux différentes exigences de stockage de journaux. #🎜🎜##🎜🎜#Summary#🎜🎜##🎜🎜#Le système de journalisation du framework Yii est un composant très pratique qui peut aider les développeurs à suivre les événements des applications pour un meilleur débogage et une meilleure analyse des performances. Lors de l'utilisation du système de journalisation, nous devons comprendre la configuration et l'utilisation de base, ainsi que quelques conseils pratiques, tels que l'utilisation d'informations contextuelles, la classification et le filtrage, la personnalisation des cibles de journal, etc. Ce n'est qu'en comprenant en profondeur et en utilisant de manière flexible le système de journalisation que nous pourrons mieux résoudre les problèmes de journalisation et améliorer la qualité et les performances des applications. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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