Zend_Log-Writers.xml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 13840 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.log.writers" xmlns:xi="http://www.w3.org/2001/XInclude">
  5. <title>Rédacteurs (Writers)</title>
  6. <para>Un rédacteur est un objet qui hérite de <classname>Zend_Log_Writer_Abstract</classname>. La responsabilité d'un
  7. rédacteur est d'enregistrer des données de log dans un stockage particulier.</para>
  8. <sect2 id="zend.log.writers.stream">
  9. <title>Écrire vers un flux (stream)</title>
  10. <para><classname>Zend_Log_Writer_Stream</classname> envoie des données de log à un <ulink
  11. url="http://www.php.net/stream">flux de PHP</ulink>.</para>
  12. <para>Pour écrire des données de log dans le buffer d'affichage de PHP, il faut utiliser l'URL
  13. <code>php://output</code>. Alternativement, vous pouvez préférer envoyer des données de log directement à un
  14. flux comme <code>STDERR</code> (<code>php://stderr</code>). <programlisting role="php"><![CDATA[
  15. $redacteur = new Zend_Log_Writer_Stream('php://output');
  16. $logger = new Zend_Log($redacteur);
  17. $logger->info("Message d'information");
  18. ]]></programlisting></para>
  19. <para>Pour écrire des données dans un fichier, employer un des <ulink
  20. url="http://www.php.net/manual/fr/wrappers.php#wrappers.file">Filesystem URLs</ulink>: <programlisting
  21. role="php"><![CDATA[
  22. $redacteur = new Zend_Log_Writer_Stream('/chemin/vers/fichierdelog');
  23. $logger = new Zend_Log($redacteur);
  24. $logger->info("Message d'information");
  25. ]]></programlisting> Par défaut, le flux s'ouvre en mode d'ajout
  26. (<code>"a"</code>). Pour l'ouvrir avec un mode différent, le constructeur de <classname>Zend_Log_Writer_Stream</classname>
  27. accepte un deuxième paramètre facultatif pour le mode.</para>
  28. <para>Le constructeur de <classname>Zend_Log_Writer_Stream</classname> accepte également une ressource existante de flux :
  29. <programlisting role="php"><![CDATA[
  30. $flux = @fopen('/chemin/vers/fichierdelog', 'a', false);
  31. if (! $flux) {
  32. throw new Exception('Impossible d\'ouvrir le flux');
  33. }
  34. $redacteur = new Zend_Log_Writer_Stream($flux);
  35. $logger = new Zend_Log($redacteur);
  36. $logger->info("Message d'information");
  37. ]]></programlisting> Vous ne pouvez pas indiquer le mode pour des ressources
  38. existantes de flux. Le faire entraînera une <classname>Zend_Log_Exception</classname>.</para>
  39. </sect2>
  40. <sect2 id="zend.log.writers.database">
  41. <title>Écrire dans des bases de données</title>
  42. <para><classname>Zend_Log_Writer_Db</classname> écrit les informations de log dans une table de base de données en
  43. utilisant <classname>Zend_Db</classname>. Le constructeur de <classname>Zend_Log_Writer_Db</classname> reçoit une instance de
  44. <classname>Zend_Db_Adapter</classname>, un nom de table, et un plan de correspondance entre les colonnes de la base de
  45. données et les données élémentaires d'événement : <programlisting role="php"><![CDATA[
  46. $parametres = array ('host' => '127.0.0.1',
  47. 'username' => 'malory',
  48. 'password' => '******',
  49. 'dbname' => 'camelot');
  50. $db = Zend_Db::factory('PDO_MYSQL', $parametres);
  51. $planDeCorrespondance = array('niveau' => 'priority', 'msg' => 'message');
  52. $redacteur = new Zend_Log_Writer_Db($db,
  53. 'nom_de_la_table_de_log',
  54. $planDeCorrespondance);
  55. $logger = new Zend_Log($redacteur);
  56. $logger->info("Message d'information");
  57. ]]></programlisting> L'exemple ci-dessus écrit une ligne unique de données de log
  58. dans la table appelée <code>nom_de_la_table_de_log</code>. La colonne de base de données appelée
  59. <code>niveau</code> reçoit le niveau de priorité et la colonne appelée <code>msg</code> reçoit le message de
  60. log.</para>
  61. </sect2>
  62. <xi:include href="Zend_Log-Writers-Firebug.xml" />
  63. <xi:include href="Zend_Log-Writers-Mail.xml">
  64. <xi:fallback><xi:include href="../../en/module_specs/Zend_Log-Writers-Mail.xml" /></xi:fallback>
  65. </xi:include>
  66. <sect2 id="zend.log.writers.null">
  67. <title>Déraciner les rédacteurs</title>
  68. <para>Le <classname>Zend_Log_Writer_Null</classname> est une souche qui écrit des données de log nulle part. Il est utile
  69. pour neutraliser le log ou déraciner le log pendant les essais :<programlisting role="php"><![CDATA[
  70. $redacteur = new Zend_Log_Writer_Null;
  71. $logger = new Zend_Log($redacteur);
  72. // va nulle part
  73. $logger->info("Message d'information");
  74. ]]></programlisting></para>
  75. </sect2>
  76. <sect2 id="zend.log.writers.mock">
  77. <title>Tester avec un simulacre</title>
  78. <para>Le <classname>Zend_Log_Writer_Mock</classname> est un rédacteur très simple qui enregistre les données brutes qu'il
  79. reçoit dans un tableau exposé comme propriété publique. <programlisting role="php"><![CDATA[
  80. $simulacre = new Zend_Log_Writer_Mock;
  81. $logger = new Zend_Log($simulacre);
  82. $logger->info("Message d'information");
  83. var_dump($mock->events[0]);
  84. // Array
  85. // (
  86. // [timestamp] => 2007-04-06T07:16:37-07:00
  87. // [message] => Message d'information
  88. // [priority] => 6
  89. // [priorityName] => INFO
  90. // )
  91. ]]></programlisting></para>
  92. <para>Pour effacer les événements notés dans le simulacre, il faut simplement réaliser
  93. <code>$simulacre-&gt;events = array()</code>.</para>
  94. </sect2>
  95. <sect2 id="zend.log.writers.compositing">
  96. <title>Additionner les rédacteurs</title>
  97. <para>Il n'y a aucun objet composite de rédacteurs. Cependant, une instance d'enregistreur peut écrire vers tout
  98. nombre de rédacteurs. Pour faire ceci, employer la méthode <code>addWriter()</code> : <programlisting
  99. role="php"><![CDATA[
  100. $redacteur1 =
  101. new Zend_Log_Writer_Stream('/chemin/vers/premier/fichierdelog');
  102. $redacteur2 =
  103. new Zend_Log_Writer_Stream('/chemin/vers/second/fichierdelog');
  104. $logger = new Zend_Log();
  105. $logger->addWriter($redacteur1);
  106. $logger->addWriter($redacteur2);
  107. // va dans les 2 rédacteurs
  108. $logger->info("Message d'information");
  109. ]]></programlisting></para>
  110. </sect2>
  111. </sect1>