Zend_Log-Overview.xml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 13840 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.log.overview">
  5. <title>Présentation</title>
  6. <para><classname>Zend_Log</classname> est un composant destiné à tous les usages du log. Il supporte l'écriture multiple
  7. centralisée, formate les messages envoyés vers les logs, et les filtre. Ces fonctions sont divisées en objets
  8. suivants : <itemizedlist>
  9. <listitem>
  10. <para>Un enregistreur (instance de <classname>Zend_Log</classname>) est l'objet que votre application emploie le
  11. plus. Vous pouvez avoir autant d'objets d'enregistreur que vous voulez ; ils n'agissent pas l'un sur
  12. l'autre. Un objet enregistreur doit contenir au moins un rédacteur (Writer), et peut facultativement
  13. contenir un ou plusieurs filtres.</para>
  14. </listitem>
  15. <listitem>
  16. <para>Un rédacteur [ou Writer] (hérite de <classname>Zend_Log_Writer_Abstract</classname>) est responsable de la
  17. sauvegarde des données dans le stockage.</para>
  18. </listitem>
  19. <listitem>
  20. <para>Un filtre (implémente <classname>Zend_Log_Filter_Interface</classname>) bloque des données de log ne devant
  21. pas être écrites. Un filtre peut être appliqué à un rédacteur en particulier, ou à tous les rédacteurs.
  22. Dans l'un ou l'autre cas, les filtres peuvent être enchaînés.</para>
  23. </listitem>
  24. <listitem>
  25. <para>Un formateur (implémente <classname>Zend_Log_Formatter_Interface</classname>) peut formater les données de
  26. log avant qu'elles soient écrites par un rédacteur. Chaque rédacteur a exactement un formateur.</para>
  27. </listitem>
  28. </itemizedlist></para>
  29. <sect2 id="zend.log.overview.creating-a-logger">
  30. <title>Créer un log</title>
  31. <para>Pour commencer à enregistrer, instanciez un rédacteur et passez le à une instance d'un enregistreur :
  32. <programlisting role="php"><![CDATA[
  33. $logger = new Zend_Log();
  34. $redacteur = new Zend_Log_Writer_Stream('php://output');
  35. $logger->addWriter($redacteur);
  36. ]]></programlisting> Il est important de noter que l'enregistreur doit avoir au moins un
  37. rédacteur. Vous pouvez ajouter tout nombre de rédacteurs en utilisant la méthode
  38. <code>addWriter()</code>.</para>
  39. <para>Alternativement, vous pouvez passer un rédacteur directement au constructeur de l'enregistreur :
  40. <programlisting role="php"><![CDATA[
  41. $logger = new Zend_Log(new Zend_Log_Writer_Stream('php://output'));
  42. ]]></programlisting>
  43. L'enregistreur est maintenant prêt à être utilisé.</para>
  44. </sect2>
  45. <sect2 id="zend.log.overview.logging-messages">
  46. <title>Messages de logs</title>
  47. <para>Pour enregistrer un message, appelez la méthode <code>log()</code> de l'instance de l'enregistreur et
  48. passez lui le message avec son niveau de priorité. <programlisting role="php"><![CDATA[
  49. $logger->log("Message d'information", Zend_Log::INFO);
  50. ]]></programlisting>
  51. Le premier paramètre de la méthode <code>log()</code> est une chaîne <code>message</code> et le deuxième
  52. paramètre est une <code>priority</code> fourni en nombre entier. La priorité doit être l'une des priorités
  53. identifiées par l'instance de l'enregistreur. Ceci est expliqué dans la prochaine section.</para>
  54. <para>Un raccourci est également disponible. Au lieu d'appeler la méthode <code>log()</code>, vous pouvez
  55. appeler une méthode par le même nom que la priorité : <programlisting role="php"><![CDATA[
  56. $logger->log("Message d'information", Zend_Log::INFO);
  57. $logger->info("Message d'information");
  58. $logger->log("Message d'urgence", Zend_Log::EMERG);
  59. $logger->emerg("Message d'urgence");
  60. ]]></programlisting></para>
  61. </sect2>
  62. <sect2 id="zend.log.overview.destroying-a-logger">
  63. <title>Détruire un log</title>
  64. <para>Si l'objet enregistreur n'est plus nécessaire, vous devez affectez la valeur <code>null</code> à la
  65. variable le contenant pour le détruire. Ceci appellera automatiquement la méthode <code>shutdown()</code> de
  66. chaque rédacteur avant que l'objet enregistreur ne soit détruit : <programlisting role="php"><![CDATA[
  67. $logger = null;
  68. ]]></programlisting>
  69. Explicitement détruire le log de cette façon est facultatif et est exécuté automatiquement à la fermeture de
  70. PHP.</para>
  71. </sect2>
  72. <sect2 id="zend.log.overview.builtin-priorities">
  73. <title>Utiliser les priorités intégrées</title>
  74. <para>La classe de <classname>Zend_Log</classname> définit les priorités suivantes : <programlisting role="php"><![CDATA[
  75. EMERG = 0; // Urgence : le système est inutilisable
  76. ALERT = 1; // Alerte: une mesure corrective
  77. // doit être prise immédiatement
  78. CRIT = 2; // Critique : états critiques
  79. ERR = 3; // Erreur: états d'erreur
  80. WARN = 4; // Avertissement: états d'avertissement
  81. NOTICE = 5; // Notice: normal mais état significatif
  82. INFO = 6; // Information: messages d'informations
  83. DEBUG = 7; // Debug: messages de déboguages
  84. ]]></programlisting> Ces priorités sont toujours disponibles, et une méthode de convenance de même nom est
  85. disponible pour chacun.</para>
  86. <para>Les priorités ne sont pas arbitraires. Elles viennent du protocole BSD <code>syslog</code>, qui est décrit
  87. dans la <ulink url="http://tools.ietf.org/html/rfc3164">RFC-3164</ulink>. Les noms et les niveaux de priorité
  88. correspondants sont également compatibles avec un autre système de log de PHP, <ulink
  89. url="http://pear.php.net/package/log">PEAR Log</ulink>, ce qui favorise l'interopérabilité entre lui et
  90. <classname>Zend_Log</classname>.</para>
  91. <para>Les numéros de priorité descendent par ordre d'importance. <code>EMERG</code> (0) est la priorité la plus
  92. importante. <code>DEBUG</code> (7) est la priorité la moins importante des priorités intégrées. Vous pouvez
  93. définir des priorités d'importance inférieure que <code>DEBUG</code>. En choisissant la priorité pour votre
  94. message de log, faîtes attention à cette hiérarchie prioritaire et choisissez convenablement.</para>
  95. </sect2>
  96. <sect2 id="zend.log.overview.user-defined-priorities">
  97. <title>Ajouter ses propres priorités</title>
  98. <para>Des priorités définies par l'utilisateur peuvent être ajoutées en cours d'exécution en utilisant la
  99. méthode de <code>addPriority()</code> de l'enregistreur : <programlisting role="php"><![CDATA[
  100. $logger->addPriority('ESSAI', 8);
  101. ]]></programlisting>
  102. L'extrait ci-dessus crée une nouvelle priorité, <code>ESSAI</code>, dont la valeur est <code>8</code>. La
  103. nouvelle priorité est alors disponible pour l'enregistreur : <programlisting role="php"><![CDATA[
  104. $logger->log("Message d'essai", 8);
  105. $logger->essai("Message d'essai");
  106. ]]></programlisting> Les nouvelles priorités ne peuvent pas surcharger celles
  107. existantes.</para>
  108. </sect2>
  109. <sect2 id="zend.log.overview.understanding-fields">
  110. <title>Comprendre les événements de logs</title>
  111. <para>Quand vous appelez la méthode <code>log()</code> ou l'un de ses raccourcis, un événement de log est créé.
  112. C'est simplement un tableau associatif avec des données décrivant l'événement qui est envoyé aux rédacteurs. Les
  113. clés suivantes sont toujours créées dans ce tableau : <code>timestamp</code>, <code>message</code>,
  114. <code>priority</code>, et <code>priorityName</code>.</para>
  115. <para>La création du tableau <code>event</code> est complètement transparente. Cependant, la connaissance du
  116. tableau d'événement est exigée pour ajouter un élément qui n'existerait pas dans le réglage par défaut
  117. ci-dessus.</para>
  118. <para>Pour ajouter un nouvel élément à chaque futur événement, appeler la méthode <code>setEventItem()</code> en
  119. donnant une clé et une valeur : <programlisting role="php"><![CDATA[
  120. $logger->setEventItem('pid', getmypid());
  121. ]]></programlisting>
  122. L'exemple ci-dessus place un nouvel élément nommé <code>pid</code> et lui donne comme valeur le PID du processus
  123. courant. Une fois qu'un nouvel élément a été placé, il est disponible automatiquement pour tous les rédacteurs
  124. avec toutes les autres données d'événement pendant l'enregistrement. Un élément peut être surchargé à tout
  125. moment en appelant une nouvelle fois la méthode <code>setEventItem()</code>.</para>
  126. <para>Le réglage d'un nouvel élément d'événement avec <code>setEventItem()</code> entraîne que le nouvel élément
  127. sera envoyé à tous les rédacteurs de l'enregistreur. Cependant, ceci ne garantit pas que les rédacteurs
  128. utilisent réellement l'élément. C'est parce que les rédacteurs ne sauront pas quoi faire avec lui à moins qu'un
  129. objet formateur soit informé du nouvel élément. Veuillez vous reporter à la section sur des formateurs pour en
  130. apprendre davantage.</para>
  131. </sect2>
  132. </sect1>