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.
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
是一个数组,可以配置多个日志目标,本例中只有一个目标,即将error
和warning
级别的日志写入@runtime/logs/app.log
文件。
在代码中记录日志信息很简单,可以使用Yii框架提供的快捷函数,例如:
Yii::info('This is an info message.'); Yii::warning('This is a warning message.'); Yii::error('This is an error message.');
快捷函数中,info
、warning
和error
分别对应日志的三个级别。可以根据情况选择使用。
在记录日志时,除了直接记录字符串以外,还可以使用可替换的数据,使用占位符{}
表示。例如:
Yii::info('User {username} registered successfully.', ['username' => 'John']);
此时,{username}
将被替换为'John'。这样的好处是日志信息更加详细,更易于排查问题。
Yii框架的日志系统支持使用上下文信息来记录更详细的日志信息。上下文信息包括了一些额外的数据,例如当前用户的信息、请求参数等等。在记录日志时,可以通过设置$context
参数来添加上下文信息,例如:
Yii::warning('Invalid user input', ['category' => 'appcontrollersMyController', 'action' => 'create', 'params' => $_POST]);
在上述代码中,我们使用了3个上下文信息,分别是所属的控制器类、请求的方法和请求参数。这样就可以更加清晰地了解日志发生的位置以及具体的请求信息。
在实际应用中,我们可能并不希望记录所有的日志信息。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错误信息。
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
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 :
rrreeeDans 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.
{}
. 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. #🎜🎜#$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. #🎜🎜#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. #🎜🎜#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!