Rédacteurs (Writers)Un rédacteur est un objet qui hérite de Zend_Log_Writer_Abstract. La responsabilité d'un rédacteur est d'enregistrer des données de log dans un stockage particulier. Écrire vers un flux (stream)Zend_Log_Writer_Stream envoie des données de log à un » flux de PHP.
Pour écrire des données de log dans le buffer d'affichage de PHP, il faut utiliser
l'URL
Pour écrire des données dans un fichier, employer un des » Filesystem URLs:
"a" ). Pour
l'ouvrir avec un mode différent, le constructeur de
Zend_Log_Writer_Stream accepte un deuxième paramètre facultatif
pour le mode.
Le constructeur de Zend_Log_Writer_Stream accepte également une ressource existante de flux :
Écrire dans des bases de donnéesZend_Log_Writer_Db écrit les informations de log dans une table de base de données en utilisant Zend_Db. Le constructeur de Zend_Log_Writer_Db reçoit une instance de Zend_Db_Adapter, un nom de table, et un plan de correspondance entre les colonnes de la base de données et les données élémentaires d'événement :
nom_de_la_table_de_log . La colonne de base de données appelée
niveau reçoit le niveau de priorité et la colonne appelée msg
reçoit le message de log.
Écrire vers FirebugZend_Log_Writer_Firebug envoie des données d'historisation vers la » console Firebug.
Toutes les données sont envoyées via le composant Zend_Wildfire_Channel_HttpHeaders qui utilise les en-têtes HTTP pour s'assurer que le contenu de la page n'est pas perturbé. Déboguer les requêtes AJAX qui requière du JSON "propre" ou un réponse XML est possible avec cette approche. Éléments requis :
Example #1 Journaliser avec Zend_Controller_Front
Example #2 Journaliser sans Zend_Controller_Front
Paramétrer les styles pour les prioritésLes priorités incorporées et celles définies par l'utilisateur peuvent être stylisées avec la méthode setPriorityStyle().
Le style par défaut pour les priorités définies par l'utilisateur peut être paramétrer avec la méthode setDefaultPriorityStyle().
Les styles supportés sont les suivants :
Préparer les données pour l'historisationToute variable PHP peut être journalisée avec les priorités incorporées, un formatage spécial est requis si vous utilisez des styles d'historisation un peu plus spécialisé. Les styles LOG, INFO, WARN, ERROR et TRACE ne requièrent pas de formatage spécial. Historisation des exceptionsPour journaliser une Zend_Exception, fournissez simplement l'objet exception au logguer. Il n'y a pas d'importance sur la priorité ou le style que vous avez fourni puisque l'exception est automatiquement reconnue.
Historisation sous forme de tableauVous pouvez aussi journaliser des données en les formatant comme un tableau. Les colonnes sont automatiquement reconnues et la première ligne de données devient automatiquement la ligne d'en-têtes. Écrire vers un émailZend_Log_Writer_Mail va écrire les entrées du log dans un message émail en utilisant Zend_Mail. Le constructeur de Zend_Log_Writer_Mail requière un objet Zend_Mail et optionnellement un objet Zend_Layout. Le cas d'utilisation principal de Zend_Log_Writer_Mail est la notification les développeurs, les administrateurs ou toute personne concernée, d'une erreur qui peut survenir dans des scripts. Zend_Log_Writer_Mail a été crée avec l'idée que si quelque chose ne tourne pas rond, une intervention humaine est nécessaire. Voici un exemple d'utilisation basique :
Zend_Log_Writer_Mail utilisera un corps de message en texte plein (plain text) par défaut. Le filtre est géré. Par exemple si le filtre est réglé sur Warnings, et que 2 évènements warnings et 5 évènements erreurs se produisent, alors 7 évènements seront envoyés. Utilisation avec Zend_LayoutUne instance de Zend_Layout peut être utilisée pour générer du HTML qui fera partie de l'émail multipart. Si Zend_Layout est utilisé, Zend_Log_Writer_Mail considérera que le corps HTML du message sera la valeur du rendu de Zend_Layout. En utilisant Zend_Log_Writer_Mail avec un objet Zend_Layout vous pouvez utiliser un formateur personnalisé grâce à setLayoutFormatter(). Si aucun formateur spécifique Zend_Layout n'est indiqué, le formateur en cours d'utilisation sera appelé. Voici un exemple :
Ligne du sujet dynamiqueLa méthode setSubjectPrependText() est utilisée à la place de Zend_Mail::setSubject() pour que la ligne de sujet dans l'émail soit générée dynamiquement avant l'envoi de l'émail. Par exemple, si le texte indiqué est "Erreurs depuis ce script", le sujet de l'émail généré par Zend_Log_Writer_Mail avec 2 warnings et 5 errors sera alors "Erreurs depuis ce script (warn = 2; error = 5)". Si le sujet n'est pas indiqué via Zend_Log_Writer_Mail, la ligne de sujet de Zend_Mail, si il y en a une, sera utilisée. AttentionEnvoyer des rapports d'erreurs par emails peut être dangereux. Si votre système de surveillance d'erreurs n'est pas correct ou a un problème, vous risquez de vous retrouver inondé de tonnes d'emails en provenance de votre application. A l'heure actuelle, il n'existe dans Zend_Log_Writer_Mail aucun système de limitation ou de contrôle du nombre ou de la fréquence d'envoi des emails. Si vous nécessitez un tel système, vous devrez l'implémenter vous-même. Encore une fois, l'unique but de Zend_Log_Writer_Mail est la notification d'un humain au sujet d'une erreur. Si ce système est clairement contrôlé, alors il peut devenir un avantage très appréciable. Ecrire dans lee journal du systèmeZend_Log_Writer_Syslog écrit les rapports de log dans le journal système (syslog). En interne, il utilise les fonctions PHP openlog(), closelog(), et syslog(). Un cas d'utilisation intéressant de Zend_Log_Writer_Syslog est le cluster de machines. La fonctionnalité de journal système permet de faire en sorte que chaque machine enregistre dans un fichier de journal centralisé, ce qui simplifie l'administration. Par défaut, tous les messages gérés sont préfixés par "Zend_Log". Si vous souhaitez changer ce nom, utilisez le constructeur ou l'accesseur:
Le journal système vous aidera aussi à identifier les messages par types d'application ("facility"), les programmes de journalisation système vont générer des fichiers journaux différents en fonction des types d'application, ce qui là encore, peut aider dans l'administration. Pour spécifier le type d'application, utilisez le constructeur ou l'accesseur. Cette option peut être l'une des constantes utilisées par openlog(), définies dans la page » du manuel de openlog().
En utilisant l'objet de log, continuez d'utiliser les constantes de Zend_Log, elles vont être converties en leurs valeurs par syslog(). Ecrire vers le moniteur Zend ServerZend_Log_Writer_ZendMonitor vous permet de journaliser des évènements via l'API de Zend Server. Vous pouvez alors aggréger des messages de journal pour l'application et tout son environnement, ceci vers un seul endroit. En interne, cet objet utilise simplement la fonction monitor_custom_event() issue de Zend Monitor. Une caractéristique particulière de l'API Monitor est que vous pouvez spécifier n'importe quelle information dans le journal. Par exemple, journaliser une exception est possible en journalisant tout l'objet Exception d'un coup et pas juste son message. L'objet sera alors visible et analysable via le moniteur d'évènement de Zend Server.
Instancier l'objet d'écriture ZendMonitor est très simple:
Ensuite, journalisez vos évènements comme d'habitude:
Vous pouvez ajouter des informations à journaliser, passez les comme second paramètre:
Ce deuxième paramètre peut être de type scalaire, objet, ou tableau; si vous souhaitez passer plusieurs informations d'un seul coup, utilisez un tableau.
Au sein de Zend Server, votre évènement est enregistré comme un "évènement personnalisé" (custom event). Depuis l'onglet "Monitor", sélectionnez le sous menu "Evènements"(Events), et utilisez ensuite le filtre "Personnalisé"(Custom).
Evènements dans le récapitulatif Zend Server Monitor Sur cette image, les deux premiers évènements listés sont des évènements personnalisés enregistré via l'objet d'écriture ZendMonitor. Cliquez alors sur un évènement pour voir toutes ses informations.
Détails de l'évènement dans Zend Server Monitor Cliquer sur le sous menu "Personnalisé"(Custom) montre les détails, c'est à dire ce que vous avez passé comme deuxième argument à la méthode de journalisation. Cet information est enregistrée sous la clé info; et vous pouvez voir que l'objet de requête a été enregistré dans cet exemple.
Déraciner les rédacteursLe Zend_Log_Writer_Null est une souche qui écrit des données de log nulle part. Il est utile pour neutraliser le log ou déraciner le log pendant les essais :
Tester avec un simulacreLe Zend_Log_Writer_Mock est un rédacteur très simple qui enregistre les données brutes qu'il reçoit dans un tableau exposé comme propriété publique.
Pour effacer les événements notés dans le simulacre, il faut simplement réaliser
Additionner les rédacteursIl n'y a aucun objet composite de rédacteurs. Cependant, une instance d'enregistreur peut écrire vers tout nombre de rédacteurs. Pour faire ceci, employer la méthode addWriter() :
|