L'analogie du journal de la version 6.0 est bien améliorée par rapport à la version précédente. Les principales nouvelles fonctionnalités incluent :
· Formatage des informations du journal
·Prise en charge de l'écriture multicanal
·Délai / Écriture en temps réel
·Événement de traitement des informations du journal
·Niveau de journal spécifié écriture de canal
·Prend en charge la fermeture des journaux/canaux
Le plus grand changement dans la nouvelle version de la classe de journaux est qu'elle prend en charge le multi-canal l'écriture, ce qui signifie que vous pouvez écrire en même temps ou ajouter une écriture de canal de journal supplémentaire à certains types de journaux. Par exemple, pour certains journaux anormaux, vous pouvez choisir d'envoyer des notifications d'erreur par e-mail.
Les autres changements incluent principalement :
·Les journaux WEB et les journaux CLI sont fusionnés et formatés
·Les informations d'accès ne sont plus enregistrées par défaut, vous pouvez les enregistrer vous-même si nécessaire
·Journaux indépendants ; prend également en charge le format JSON Enregistrement ;
La configuration associée du journal peut être définie dans le fichier config/log.php. Cet article décrit principalement les modifications apportées à la nouvelle version du journal.Canal de journal
Le concept de canal de journal équivaut à la création d'un espace de journal pour les informations de journal. Les informations de journal de chaque canal de journal adoptent un mécanisme ou une configuration d'écriture indépendant. . Paramètres, vous pouvez spécifier le canal de journal par défaut pour les informations de journal, ou vous pouvez changer dynamiquement d'écriture de canal et prendre en charge l'écriture des mêmes informations de journal sur plusieurs canaux de journal en même temps. Vous pouvez définir des canaux dans la configuration des canaux du fichier de configuration du journal. Par défaut, un seul canal de fichier est défini.// 日志通道列表 'channels' => [ 'file' => [ // 日志记录方式 'type' => 'File', // 日志保存目录 'path' => '', // 单文件日志写入 'single' => false, // 独立日志级别 'apart_level' => [], // 最大日志文件数量 'max_files' => 0, // 使用JSON格式记录 'json' => false, // 日志输出格式化 'format' => '[%s][%s] %s', // 是否实时写入 'realtime_write' => false, ], // 其它日志通道配置 ],Chaque canal de journal doit spécifier le paramètre de type. Ce paramètre détermine la méthode d'écriture du fichier journal, c'est-à-dire l'écriture en mode journal de fichier. Si vous devez spécifier d'autres méthodes d'écriture, vous devez installer des extensions supplémentaires. . Mais vous pouvez également spécifier le même type pour différents canaux de journalisation, mais les autres paramètres de configuration sont différents, tels que des chemins d'écriture différents. Quel que soit le type d'écriture de journal utilisé, les configurations courantes que chaque canal de journal peut prendre en charge sont les suivantes : L'utilisation du paramètre de niveau est Conformément à la configuration globale du journal. Sauf en mode ligne de commande, le journal par défaut est écrit une fois la demande terminée. Si vous devez écrire les informations du journal en temps réel, vous devez le définir.
'realtime_write'=>true,
S'il est sous la ligne de commande, le journal sera automatiquement écrit en temps réel, qu'il soit défini ou non.
Canal par défaut
Définissez le canal par défaut du journal en définissant le paramètre par défaut, par exemple :'default'=>'file',
Niveau canal
Vous pouvez définir différents niveaux de journalisation et utiliser différents canaux de journalisation.'type_channel'=>[ // 对于error日志级别 同时写入file和email两个日志通道 'error'=>['file','email'], ]
Après avoir défini un canal de niveau, les journaux à ce niveau ne seront pas enregistrés sur le canal par défaut, veuillez noter.Le canal de journalisation nécessite la coopération du draveur. Vous pouvez également personnaliser le draveur.
Changer de canal
Vous pouvez également changer manuellement le canal d'écriture par défaut du journal actuel, par exemple :Log::channel('email')->info('这是日志信息');Prend en charge le changement pour utiliser plusieurs canaux enregistrement, par exemple :
Log::channel(['email', 'file'])->info('这是日志信息');
Traitement du journal
L'écriture du journal prend en charge la surveillance des événements, par exemple :Event::listen('think\event\LogWrite', function($event) { if('file' == $event->channel) { $event->log['info'][] = 'test info'; } });Le paramètre de fermeture est un LogWrite instance d'objet de classe d'événement, vous pouvez obtenir deux attributs : Les informations du journal sont un tableau bidimensionnel qui contient tous les niveaux d'informations du journal (autorisés à être enregistrés) sous le canal de journal actuel.
Formater les informations du journal
Le système fournit deux paramètres pour formater les informations du journal. Le premier est time_format pour personnaliser le format d'affichage de l'heure. paramètre du format de sortie du journal.'channels' => [ 'file' => [ 'type' => 'file', 'json' =>true 'file_size' => 1024*1024*10, 'time_format' => 'Y-m-d H:i:s', 'format' => '[%s][%s]:%s', ], ],Le premier %s du paramètre de format est l'heure d'enregistrement du journal (le format de l'heure du journal est défini par le paramètre time_format) Le deuxième %s est le niveau de journalisation Le troisième %s est les informations du journal , la commande ne peut pas être ajustée .
Journal au format JSON
peut prendre en charge les journaux de fichiers d'enregistrement au format JSON, ce qui rend plus pratique l'analyse des journaux par certains outils d'analyse de journaux tiers. Dans le fichier de configuration du journal, ajoutezreturn [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'json' =>true 'file_size' => 1024*1024*10, ], ], ];pour activer la journalisation au format JSON La journalisation en ligne de commande CLI est également valide.
和之前版本的区别在于,新版的每个日志信息都是一条JSON数据(旧版本是每个请求一条JSON数据)。
关闭日志
你可以通过调用close方法动态关闭日志写入。
// 关闭全局日志写入 Log::close(); // 关闭某个通道日志写入 Log::close('file');
如果调用close方法动态关闭日志,会自动调用clear方法清空日志。
清空日志
一旦执行save方法后,内存中的日志信息就会被自动清空,如果需要提前清空日志可以使用:
// 清空所有日志 Log::clear(); //清空通道日志可以使用 Log::clear('file');
在清空日志方法之前,你可以使用getLog方法获取内存中的日志。
// 获取(默认通道)日志 $logs = Log::getLog(); // 获取指定通道日志 $logs = Log::getLog('file');
日志清空仅仅是清空内存中的日志。
自定义驱动
日志通道需要自定义日志驱动,该日志驱动需要实现think\contract\LogHandlerInterface接口。
interface LogHandlerInterface { /** * 日志写入接口 * @access public * @param array $log 日志信息 * @return bool */ public function save(array $log): bool; }
众多ThinkPHP教程,尽在PHP中文网,欢迎在线学习!
本文转自:https://blog.thinkphp.cn/1186947
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!