Zend_Log-Factory.xml 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24604 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.log.factory">
  5. <title>Utiliser la fabrique pour créer des logs</title>
  6. <para>
  7. En plus de pouvoir instancier les objets directement, il est possible d'utiliser une fabrique,
  8. la méthode <methodname>factory()</methodname> d'une instance Log, et il est possible de configurer
  9. les objets d'écriture (writers) et leurs filtres. En utilisant la fabrique, vous pouvez attacher
  10. plusieurs objets d'écriture dont la configuration peut être passée sous forme de tableau ou d'objet
  11. <classname>Zend_Config</classname>.
  12. </para>
  13. <para>
  14. Un exemple:
  15. </para>
  16. <programlisting language="php"><![CDATA[
  17. $logger = Zend_Log::factory(array(
  18. 'timestampFormat' => 'Y-m-d',
  19. array(
  20. 'writerName' => 'Stream',
  21. 'writerParams' => array(
  22. 'stream' => '/tmp/zend.log',
  23. ),
  24. 'formatterName' => 'Simple',
  25. 'formatterParams' => array(
  26. 'format' => '%timestamp%: %message% -- %info%',
  27. ),
  28. 'filterName' => 'Priority',
  29. 'filterParams' => array(
  30. 'priority' => Zend_Log::WARN,
  31. ),
  32. ),
  33. array(
  34. 'writerName' => 'Firebug',
  35. 'filterName' => 'Priority',
  36. 'filterParams' => array(
  37. 'priority' => Zend_Log::INFO,
  38. ),
  39. ),
  40. ));
  41. ]]></programlisting>
  42. <para>
  43. Le code ci-dessus instancie un objet journal et 2 objets d'écriture dont un vers un
  44. fichier local, puis un vers Firebug. Chacun possède un filtre sur la priorité avec
  45. un niveau maximum différent.
  46. </para>
  47. <para>
  48. Les évènements sont journalisés avec le format de date ISO 8601 par défaut. Vous
  49. pouvez choisir votre propre format avec l'option <emphasis>timestampFormat</emphasis>.
  50. </para>
  51. <para>
  52. Chaque objet d'écriture support les options suivantes:
  53. </para>
  54. <variablelist>
  55. <varlistentry>
  56. <term>writerName (requis)</term>
  57. <listitem>
  58. <para>
  59. Le nom "court" de l'objet d'écriture; le nom sans le préfixe. Voyez
  60. "writerNamespace" pour plus de détails, des exemples sont : "Mock",
  61. "Stream", "Firebug".
  62. </para>
  63. </listitem>
  64. </varlistentry>
  65. <varlistentry>
  66. <term>writerParams (optionnel)</term>
  67. <listitem>
  68. <para>
  69. Tableau associatif de paramètre à utiliser à l'instanciation de l'objet d'écriture.
  70. Chaque méthode <methodname>factory()</methodname> fera suivre ces paramètres.
  71. </para>
  72. </listitem>
  73. </varlistentry>
  74. <varlistentry>
  75. <term>writerNamespace (optionnel)</term>
  76. <listitem>
  77. <para>
  78. Le préfixe de classe ou espace de nom(namespace) à utiliser pour créer le nom de classe
  79. complet de l'objet d'écriture. Par défault : "Zend_Log_Writer".
  80. </para>
  81. </listitem>
  82. </varlistentry>
  83. <varlistentry>
  84. <term>formatterName (optionnel)</term>
  85. <listitem>
  86. <para>
  87. Le nom "court" d'un formateur à utiliser sur l'objet d'écriture. Voyez
  88. "formatterNamespace" pour plus de détails. Exemples: "Simple", "Xml".
  89. </para>
  90. </listitem>
  91. </varlistentry>
  92. <varlistentry>
  93. <term>formatterParams (optionnel)</term>
  94. <listitem>
  95. <para>
  96. Tableau associatif de paramètre à utiliser à l'instanciation de l'objet formateur.
  97. Chaque méthode <methodname>factory()</methodname> fera suivre ces paramètres.
  98. </para>
  99. </listitem>
  100. </varlistentry>
  101. <varlistentry>
  102. <term>formatterNamespace (optionnel)</term>
  103. <listitem>
  104. <para>
  105. Le préfixe de classe ou espace de nom(namespace) à utiliser pour créer le nom de classe
  106. complet de l'objet formateur. Par défault : "Zend_Log_Formatter".
  107. </para>
  108. </listitem>
  109. </varlistentry>
  110. <varlistentry>
  111. <term>filterName (optionnel)</term>
  112. <listitem>
  113. <para>
  114. Le nom "court" d'un filtre à utiliser sur l'objet d'écriture. Voyez "filterNamespace"
  115. pour plus de détails. Exemples: "Message", "Priority".
  116. </para>
  117. </listitem>
  118. </varlistentry>
  119. <varlistentry>
  120. <term>filterParams (optionnel)</term>
  121. <listitem>
  122. <para>
  123. Tableau associatif de paramètre à utiliser à l'instanciation de l'objet filtre.
  124. Chaque méthode <methodname>factory()</methodname> fera suivre ces paramètres.
  125. </para>
  126. </listitem>
  127. </varlistentry>
  128. <varlistentry>
  129. <term>filterNamespace (optionnel)</term>
  130. <listitem>
  131. <para>
  132. Le préfixe de classe ou espace de nom(namespace) à utiliser pour créer le nom de classe
  133. complet de l'objet filtre. Par défault : "Zend_Log_Filter".
  134. </para>
  135. </listitem>
  136. </varlistentry>
  137. </variablelist>
  138. <para>
  139. Chaque objet d'écriture et chaque filtre possède des options.
  140. </para>
  141. <sect2 id="zend.log.factory.writer-options">
  142. <title>Options pour les objets d'écriture</title>
  143. <sect3 id="zend.log.factory.writer-options.db">
  144. <title>Zend_Log_Writer_Db Options</title>
  145. <variablelist>
  146. <varlistentry>
  147. <term>db</term>
  148. <listitem>
  149. <para>
  150. Une instance de <classname>Zend_Db_Adapter</classname>
  151. </para>
  152. </listitem>
  153. </varlistentry>
  154. <varlistentry>
  155. <term>table</term>
  156. <listitem>
  157. <para>
  158. Nom de la table à utiliser.
  159. </para>
  160. </listitem>
  161. </varlistentry>
  162. <varlistentry>
  163. <term>columnMap</term>
  164. <listitem>
  165. <para>
  166. Tableau associatif de correspondance entre les noms des colonnes de la table
  167. et les champs des évènements du journal.
  168. </para>
  169. </listitem>
  170. </varlistentry>
  171. </variablelist>
  172. </sect3>
  173. <sect3 id="zend.log.factory.writer-options.firebug">
  174. <title>Zend_Log_Writer_Firebug Options</title>
  175. <para>
  176. Aucune option n'est acceptée par cet objet d'écriture.
  177. </para>
  178. </sect3>
  179. <sect3 id="zend.log.factory.writer-options.mail">
  180. <title>Zend_Log_Writer_Mail Options</title>
  181. <table id="zend.log.factory.writer-options.mail.table">
  182. <title>Zend_Log_Writer_Mail Options</title>
  183. <tgroup cols="4">
  184. <thead>
  185. <row>
  186. <entry>Option</entry>
  187. <entry>Type de données</entry>
  188. <entry>Valeur par défaut</entry>
  189. <entry>Description</entry>
  190. </row>
  191. </thead>
  192. <tbody>
  193. <row>
  194. <entry><emphasis>mail</emphasis></entry>
  195. <entry><type>String</type></entry>
  196. <entry><classname>Zend_Mail</classname></entry>
  197. <entry>
  198. Une instance de <classname>Zend_Mail</classname>
  199. </entry>
  200. </row>
  201. <row>
  202. <entry><emphasis>charset</emphasis></entry>
  203. <entry><type>String</type></entry>
  204. <entry>iso-8859-1</entry>
  205. <entry>
  206. L'encodage pour le courriel
  207. </entry>
  208. </row>
  209. <row>
  210. <entry><emphasis>from</emphasis></entry>
  211. <entry><type>String</type> or <type>Array</type></entry>
  212. <entry><constant>NULL</constant></entry>
  213. <entry>
  214. Expéditeur du courriel.
  215. Les paramètres pour un type <type>Array</type> sont :
  216. <itemizedlist>
  217. <listitem>
  218. <para>
  219. <property>email</property> : adresse de l'expéditeur
  220. </para>
  221. </listitem>
  222. <listitem>
  223. <para>
  224. <property>name</property> : nom de l'expéditeur
  225. </para>
  226. </listitem>
  227. </itemizedlist>
  228. </entry>
  229. </row>
  230. <row>
  231. <entry><emphasis>to</emphasis></entry>
  232. <entry><type>String</type> or <type>Array</type></entry>
  233. <entry><constant>NULL</constant></entry>
  234. <entry>
  235. Destinataire(s) du courriel
  236. </entry>
  237. </row>
  238. <row>
  239. <entry><emphasis>cc</emphasis></entry>
  240. <entry><type>String</type> or <type>Array</type></entry>
  241. <entry><constant>NULL</constant></entry>
  242. <entry>
  243. Destinataire(s) en copie(s) du courriel
  244. </entry>
  245. </row>
  246. <row>
  247. <entry><emphasis>bcc</emphasis></entry>
  248. <entry><type>String</type> or <type>Array</type></entry>
  249. <entry><constant>NULL</constant></entry>
  250. <entry>
  251. Destinataire(s) en copie(s) cachée(s) du courriel
  252. </entry>
  253. </row>
  254. <row>
  255. <entry><emphasis>subject</emphasis></entry>
  256. <entry><type>String</type></entry>
  257. <entry><constant>NULL</constant></entry>
  258. <entry>
  259. Sujet du courriel
  260. </entry>
  261. </row>
  262. <row>
  263. <entry><emphasis>subjectPrependText</emphasis></entry>
  264. <entry><type>String</type></entry>
  265. <entry><constant>NULL</constant></entry>
  266. <entry>
  267. Un résumé du nombre de chaque niveau d'erreurs sera ajouté
  268. à la suite du sujet du courriel
  269. </entry>
  270. </row>
  271. <row>
  272. <entry><emphasis>layout</emphasis></entry>
  273. <entry><type>String</type></entry>
  274. <entry><constant>NULL</constant></entry>
  275. <entry>
  276. Une instance de <classname>Zend_Layout</classname>
  277. </entry>
  278. </row>
  279. <row>
  280. <entry><emphasis>layoutOptions</emphasis></entry>
  281. <entry><type>Array</type></entry>
  282. <entry><constant>NULL</constant></entry>
  283. <entry>
  284. Voir la section <xref linkend="zend.layout.options" />
  285. </entry>
  286. </row>
  287. <row>
  288. <entry><emphasis>layoutFormatter</emphasis></entry>
  289. <entry><type>String</type></entry>
  290. <entry><constant>NULL</constant></entry>
  291. <entry>
  292. Une instance de <classname>Zend_Log_Formatter_Interface</classname>
  293. </entry>
  294. </row>
  295. </tbody>
  296. </tgroup>
  297. </table>
  298. </sect3>
  299. <sect3 id="zend.log.factory.writer-options.mock">
  300. <title>Zend_Log_Writer_Mock Options</title>
  301. <para>
  302. Aucune option n'est acceptée par cet objet d'écriture.
  303. </para>
  304. </sect3>
  305. <sect3 id="zend.log.factory.writer-options.null">
  306. <title>Zend_Log_Writer_Null Options</title>
  307. <para>
  308. Aucune option n'est acceptée par cet objet d'écriture.
  309. </para>
  310. </sect3>
  311. <sect3 id="zend.log.factory.writer-options.stream">
  312. <title>Zend_Log_Writer_Stream Options</title>
  313. <variablelist>
  314. <varlistentry>
  315. <term>stream|url</term>
  316. <listitem>
  317. <para>
  318. Un identifiant de flux <acronym>PHP</acronym> valide vers lequel journaliser.
  319. </para>
  320. </listitem>
  321. </varlistentry>
  322. <varlistentry>
  323. <term>mode</term>
  324. <listitem>
  325. <para>
  326. Le mode I/O (Lecture/Ecriture) à utiliser; défaut : "a" pour "append".
  327. </para>
  328. </listitem>
  329. </varlistentry>
  330. </variablelist>
  331. </sect3>
  332. <sect3 id="zend.log.factory.writer-options.syslog">
  333. <title>Zend_Log_Writer_Syslog Options</title>
  334. <variablelist>
  335. <varlistentry>
  336. <term>application</term>
  337. <listitem>
  338. <para>
  339. Nom de l'application utilisé par le journaliseur syslog.
  340. </para>
  341. </listitem>
  342. </varlistentry>
  343. <varlistentry>
  344. <term>facility</term>
  345. <listitem>
  346. <para>
  347. Facility utilisée par le journal syslog.
  348. </para>
  349. </listitem>
  350. </varlistentry>
  351. </variablelist>
  352. </sect3>
  353. <sect3 id="zend.log.factory.writer-options.zendmonitor">
  354. <title>Zend_Log_Writer_ZendMonitor Options</title>
  355. <para>
  356. Aucune option n'est acceptée par cet objet d'écriture.
  357. </para>
  358. </sect3>
  359. </sect2>
  360. <sect2 id="zend.log.factory.filter-options">
  361. <title>Options des filtres</title>
  362. <sect3 id="zend.log.factory.filter-options.message">
  363. <title>Zend_Log_Filter_Message Options</title>
  364. <variablelist>
  365. <varlistentry>
  366. <term>regexp</term>
  367. <listitem>
  368. <para>
  369. Expression régulière à faire correspondre par rapport au message du journal.
  370. </para>
  371. </listitem>
  372. </varlistentry>
  373. </variablelist>
  374. </sect3>
  375. <sect3 id="zend.log.factory.filter-options.priority">
  376. <title>Zend_Log_Filter_Priority Options</title>
  377. <variablelist>
  378. <varlistentry>
  379. <term>priority</term>
  380. <listitem>
  381. <para>
  382. La priorité maximale à journaliser.
  383. </para>
  384. </listitem>
  385. </varlistentry>
  386. <varlistentry>
  387. <term>operator</term>
  388. <listitem>
  389. <para>
  390. L'opérateur de comparaison (supérieur ou inférieur) à utiliser pour la comparaison,
  391. "&lt;=" est utilisé par défaut.
  392. </para>
  393. </listitem>
  394. </varlistentry>
  395. </variablelist>
  396. </sect3>
  397. <sect3 id="zend.log.factory.filter-options.suppress">
  398. <title>Zend_Log_Filter_Suppress Options</title>
  399. <para>
  400. Aucune option n'est acceptée par cet objet d'écriture.
  401. </para>
  402. </sect3>
  403. </sect2>
  404. <sect2 id="zend.log.factory.custom">
  405. <title>Créer des objets d'écriture et des filtres configurés</title>
  406. <para>
  407. SI vous souhaitez créer vos propres objets d'écriture du journal, ou vos propres filtres, il est
  408. possible de les rendre compatibles avec <methodname>Zend_Log::factory()</methodname> facilement.
  409. </para>
  410. <para>
  411. Vous devez au minimum implémenter
  412. <interfacename>Zend_Log_FactoryInterface</interfacename>, qui attend une méthode statique
  413. <methodname>factory()</methodname> accéptant un seul argument,
  414. <varname>$config</varname>, de types tableau ou instance de
  415. <classname>Zend_Config</classname>. Si vos objets étendent
  416. <classname>Zend_Log_Writer_Abstract</classname>, ou vos filtres étendent
  417. <classname>Zend_Log_Filter_Abstract</classname>, alors ce sera tout.
  418. </para>
  419. <para>
  420. Après, définissez la correspondance entre les options de configuration et les arguments du
  421. constructeur. Par exemple :
  422. </para>
  423. <programlisting language="php"><![CDATA[
  424. class My_Log_Writer_Foo extends Zend_Log_Writer_Abstract
  425. {
  426. public function __construct($bar, $baz)
  427. {
  428. // ...
  429. }
  430. public static function factory($config)
  431. {
  432. if ($config instanceof Zend_Config) {
  433. $config = $config->toArray();
  434. }
  435. if (!is_array($config)) {
  436. throw new Exception(
  437. 'factory attend un tableau ou un Zend_Config'
  438. );
  439. }
  440. $default = array(
  441. 'bar' => null,
  442. 'baz' => null,
  443. );
  444. $config = array_merge($default, $config);
  445. return new self(
  446. $config['bar'],
  447. $config['baz']
  448. );
  449. }
  450. }
  451. ]]></programlisting>
  452. <para>
  453. Aussi, il est possible d'appeler les setters après l'instanciation, mais avant de retourner
  454. l'instance:
  455. </para>
  456. <programlisting language="php"><![CDATA[
  457. class My_Log_Writer_Foo extends Zend_Log_Writer_Abstract
  458. {
  459. public function __construct($bar = null, $baz = null)
  460. {
  461. // ...
  462. }
  463. public function setBar($value)
  464. {
  465. // ...
  466. }
  467. public function setBaz($value)
  468. {
  469. // ...
  470. }
  471. public static function factory($config)
  472. {
  473. if ($config instanceof Zend_Config) {
  474. $config = $config->toArray();
  475. }
  476. if (!is_array($config)) {
  477. throw new Exception(
  478. 'factory attend un tableau ou un Zend_Config'
  479. );
  480. }
  481. $writer = new self();
  482. if (isset($config['bar'])) {
  483. $writer->setBar($config['bar']);
  484. }
  485. if (isset($config['baz'])) {
  486. $writer->setBaz($config['baz']);
  487. }
  488. return $writer;
  489. }
  490. }
  491. ]]></programlisting>
  492. </sect2>
  493. </sect1>