Zend_Log-Overview.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24604 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.log.overview">
  5. <title>Présentation</title>
  6. <para>
  7. <classname>Zend_Log</classname> est un composant destiné à tous les usages du log. Il
  8. supporte l'écriture multiple centralisée, formate les messages envoyés vers les logs, et les
  9. filtre. Ces fonctions sont divisées en objets suivants : <itemizedlist>
  10. <listitem>
  11. <para>
  12. Un enregistreur (instance de <classname>Zend_Log</classname>) est l'objet
  13. que votre application emploie le plus. Vous pouvez avoir autant d'objets
  14. d'enregistreur que vous voulez ; ils n'agissent pas l'un sur l'autre. Un objet
  15. enregistreur doit contenir au moins un rédacteur (Writer), et peut
  16. facultativement contenir un ou plusieurs filtres.
  17. </para>
  18. </listitem>
  19. <listitem>
  20. <para>
  21. Un rédacteur [ou Writer] (hérite de
  22. <classname>Zend_Log_Writer_Abstract</classname>) est responsable de la
  23. sauvegarde des données dans le stockage.
  24. </para>
  25. </listitem>
  26. <listitem>
  27. <para>
  28. Un filtre (implémente <classname>Zend_Log_Filter_Interface</classname>)
  29. bloque des données de log ne devant pas être écrites. Un filtre peut être
  30. appliqué à un rédacteur en particulier, ou à tous les rédacteurs. Dans l'un ou
  31. l'autre cas, les filtres peuvent être enchaînés.
  32. </para>
  33. </listitem>
  34. <listitem>
  35. <para>
  36. Un formateur (implémente
  37. <classname>Zend_Log_Formatter_Interface</classname>) peut formater les données
  38. de log avant qu'elles soient écrites par un rédacteur. Chaque rédacteur a
  39. exactement un formateur.
  40. </para>
  41. </listitem>
  42. </itemizedlist>
  43. </para>
  44. <sect2 id="zend.log.overview.creating-a-logger">
  45. <title>Créer un log</title>
  46. <para>
  47. Pour commencer à enregistrer, instanciez un rédacteur et passez le à une instance
  48. d'un enregistreur : <programlisting language="php"><![CDATA[
  49. $logger = new Zend_Log();
  50. $redacteur = new Zend_Log_Writer_Stream('php://output');
  51. $logger->addWriter($redacteur);
  52. ]]></programlisting> Il est important de noter que l'enregistreur doit avoir au moins un
  53. rédacteur. Vous pouvez ajouter tout nombre de rédacteurs en utilisant la méthode
  54. <methodname>addWriter()</methodname>.
  55. </para>
  56. <para>
  57. Alternativement, vous pouvez passer un rédacteur directement au constructeur de
  58. l'enregistreur : <programlisting language="php"><![CDATA[
  59. $logger = new Zend_Log(new Zend_Log_Writer_Stream('php://output'));
  60. ]]></programlisting> L'enregistreur est maintenant prêt à être utilisé.
  61. </para>
  62. </sect2>
  63. <sect2 id="zend.log.overview.logging-messages">
  64. <title>Messages de logs</title>
  65. <para>
  66. Pour enregistrer un message, appelez la méthode <methodname>log()</methodname> de l'instance
  67. de l'enregistreur et passez lui le message avec son niveau de priorité. <programlisting
  68. role="php"><![CDATA[
  69. $logger->log("Message d'information", Zend_Log::INFO);
  70. ]]></programlisting> Le premier paramètre de la méthode <methodname>log()</methodname> est une chaîne
  71. <code>message</code> et le deuxième paramètre est une <code>priority</code> fourni en
  72. nombre entier. La priorité doit être l'une des priorités identifiées par l'instance de
  73. l'enregistreur. Ceci est expliqué dans la prochaine section.
  74. </para>
  75. <para>
  76. Un raccourci est également disponible. Au lieu d'appeler la méthode
  77. <methodname>log()</methodname>, vous pouvez appeler une méthode par le même nom que la priorité :
  78. <programlisting language="php"><![CDATA[
  79. $logger->log("Message d'information", Zend_Log::INFO);
  80. $logger->info("Message d'information");
  81. $logger->log("Message d'urgence", Zend_Log::EMERG);
  82. $logger->emerg("Message d'urgence");
  83. ]]></programlisting></para>
  84. </sect2>
  85. <sect2 id="zend.log.overview.destroying-a-logger">
  86. <title>Détruire un log</title>
  87. <para>
  88. Si l'objet enregistreur n'est plus nécessaire, vous devez affectez la valeur
  89. <constant>NULL</constant> à la variable le contenant pour le détruire. Ceci appellera
  90. automatiquement la méthode <methodname>shutdown()</methodname> de chaque rédacteur avant que l'objet
  91. enregistreur ne soit détruit : <programlisting language="php"><![CDATA[
  92. $logger = null;
  93. ]]></programlisting> Explicitement détruire le log de cette façon est facultatif et est exécuté
  94. automatiquement à la fermeture de PHP.
  95. </para>
  96. </sect2>
  97. <sect2 id="zend.log.overview.builtin-priorities">
  98. <title>Utiliser les priorités intégrées</title>
  99. <para>
  100. La classe de <classname>Zend_Log</classname> définit les priorités suivantes :
  101. <programlisting language="php"><![CDATA[
  102. EMERG = 0; // Urgence : le système est inutilisable
  103. ALERT = 1; // Alerte: une mesure corrective
  104. // doit être prise immédiatement
  105. CRIT = 2; // Critique : états critiques
  106. ERR = 3; // Erreur: états d'erreur
  107. WARN = 4; // Avertissement: états d'avertissement
  108. NOTICE = 5; // Notice: normal mais état significatif
  109. INFO = 6; // Information: messages d'informations
  110. DEBUG = 7; // Debug: messages de déboguages
  111. ]]></programlisting> Ces priorités sont toujours disponibles, et une méthode de convenance de
  112. même nom est disponible pour chacun.
  113. </para>
  114. <para>
  115. Les priorités ne sont pas arbitraires. Elles viennent du protocole BSD
  116. <code>syslog</code>, qui est décrit dans la <ulink
  117. url="http://tools.ietf.org/html/rfc3164">RFC-3164</ulink>. Les noms et les niveaux de
  118. priorité correspondants sont également compatibles avec un autre système de log de <acronym>PHP</acronym>,
  119. <ulink url="http://pear.php.net/package/log">PEAR Log</ulink>, ce qui favorise
  120. l'interopérabilité entre lui et <classname>Zend_Log</classname>.
  121. </para>
  122. <para>
  123. Les numéros de priorité descendent par ordre d'importance. <constant>EMERG</constant> (0)
  124. est la priorité la plus importante. <constant>DEBUG</constant> (7) est la priorité la moins
  125. importante des priorités intégrées. Vous pouvez définir des priorités d'importance
  126. inférieure que <constant>DEBUG</constant>. En choisissant la priorité pour votre message de log,
  127. faîtes attention à cette hiérarchie prioritaire et choisissez convenablement.
  128. </para>
  129. </sect2>
  130. <sect2 id="zend.log.overview.user-defined-priorities">
  131. <title>Ajouter ses propres priorités</title>
  132. <para>
  133. Des priorités définies par l'utilisateur peuvent être ajoutées en cours
  134. d'exécution en utilisant la méthode de <methodname>addPriority()</methodname> de l'enregistreur :
  135. <programlisting language="php"><![CDATA[
  136. $logger->addPriority('ESSAI', 8);
  137. ]]></programlisting> L'extrait ci-dessus crée une nouvelle priorité, <constant>ESSAI</constant>, dont la
  138. valeur est <code>8</code>. La nouvelle priorité est alors disponible pour l'enregistreur
  139. : <programlisting language="php"><![CDATA[
  140. $logger->log("Message d'essai", 8);
  141. $logger->essai("Message d'essai");
  142. ]]></programlisting> Les nouvelles priorités ne peuvent pas surcharger celles existantes.
  143. </para>
  144. </sect2>
  145. <sect2 id="zend.log.overview.understanding-fields">
  146. <title>Comprendre les événements de logs</title>
  147. <para>
  148. Quand vous appelez la méthode <methodname>log()</methodname> ou l'un de ses raccourcis, un
  149. événement de log est créé. C'est simplement un tableau associatif avec des données
  150. décrivant l'événement qui est envoyé aux rédacteurs. Les clés suivantes sont toujours
  151. créées dans ce tableau : <code>timestamp</code>, <code>message</code>,
  152. <code>priority</code>, et <code>priorityName</code>.
  153. </para>
  154. <para>
  155. La création du tableau <code>event</code> est complètement transparente.
  156. Cependant, la connaissance du tableau d'événement est exigée pour ajouter un élément qui
  157. n'existerait pas dans le réglage par défaut ci-dessus.
  158. </para>
  159. <para>
  160. Pour ajouter un nouvel élément à chaque futur événement, appeler la méthode
  161. <methodname>setEventItem()</methodname> en donnant une clé et une valeur : <programlisting
  162. role="php"><![CDATA[
  163. $logger->setEventItem('pid', getmypid());
  164. ]]></programlisting> L'exemple ci-dessus place un nouvel élément nommé <code>pid</code> et lui
  165. donne comme valeur le PID du processus courant. Une fois qu'un nouvel élément a été
  166. placé, il est disponible automatiquement pour tous les rédacteurs avec toutes les autres
  167. données d'événement pendant l'enregistrement. Un élément peut être surchargé à tout
  168. moment en appelant une nouvelle fois la méthode <methodname>setEventItem()</methodname>.
  169. </para>
  170. <para>
  171. Le réglage d'un nouvel élément d'événement avec <methodname>setEventItem()</methodname>
  172. entraîne que le nouvel élément sera envoyé à tous les rédacteurs de l'enregistreur.
  173. Cependant, ceci ne garantit pas que les rédacteurs utilisent réellement l'élément. C'est
  174. parce que les rédacteurs ne sauront pas quoi faire avec lui à moins qu'un objet
  175. formateur soit informé du nouvel élément. Veuillez vous reporter à la section sur des
  176. formateurs pour en apprendre davantage.
  177. </para>
  178. </sect2>
  179. <sect2 id="zend.log.overview.as-errorHandler">
  180. <title>Log PHP Errors</title>
  181. <para>
  182. <classname>Zend_Log</classname> can also be used to log <acronym>PHP</acronym> errors.
  183. Calling <methodname>registerErrorHandler()</methodname> will add
  184. <classname>Zend_Log</classname> before the current error handler, and will pass the
  185. error along as well.
  186. </para>
  187. <para>
  188. Zend_Log events from PHP errors have the additional fields matching
  189. <methodname>handler ( int $errno , string $errstr [, string $errfile [, int
  190. $errline [, array $errcontext ]]] )</methodname> from <ulink
  191. url="http://us3.php.net/manual/en/function.set-error-handler.php">set_error_handler</ulink>
  192. </para>
  193. <table id="zend.log.overview.as-errorHandler.properties.table-1">
  194. <title>Additional fields for Zend_Log events from PHP errors</title>
  195. <tgroup cols="3">
  196. <thead>
  197. <row>
  198. <entry>Name</entry>
  199. <entry>Error Handler Parameter</entry>
  200. <entry>Description</entry>
  201. </row>
  202. </thead>
  203. <tbody>
  204. <row>
  205. <entry>message</entry>
  206. <entry>errstr</entry>
  207. <entry>Contains the error message, as a string.</entry>
  208. </row>
  209. <row>
  210. <entry>errno</entry>
  211. <entry>errno</entry>
  212. <entry>Contains the level of the error raised, as an integer.</entry>
  213. </row>
  214. <row>
  215. <entry>file</entry>
  216. <entry>errfile</entry>
  217. <entry>
  218. Contains the filename that the error was raised in, as a string.
  219. </entry>
  220. </row>
  221. <row>
  222. <entry>line</entry>
  223. <entry>errline</entry>
  224. <entry>
  225. Contains the line number the error was raised at, as an integer.
  226. </entry>
  227. </row>
  228. <row>
  229. <entry>context</entry>
  230. <entry>errcontext</entry>
  231. <entry>
  232. (optional) An array that points to the active symbol table at the point
  233. the error occurred. In other words, errcontext will contain an array of
  234. every variable that existed in the scope the error was triggered in.
  235. User error handler must not modify error context.
  236. </entry>
  237. </row>
  238. </tbody>
  239. </tgroup>
  240. </table>
  241. </sect2>
  242. </sect1>