1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.log.formatters">
<title>Formatter</title>
<para>
Ein Formatter ist ein Objekt das dafür zuständig ist ein <property>event</property> Array
anzunehmen welches ein Log Event beschreibt und einen String auszugeben mit einer
formatierten Logzeile.
</para>
<para>
Einige Writer sind nicht zeilen-orientiert und können keinen Formatter benutzen. Ein
Beispiel ist der Datenbank Writer, welcher die Events direkt in die Datenbankzeilen einfügt.
Für Writer die Formatter nicht unterstützen können, wird eine Ausnahme geworfen wenn
versucht wird einen Formatter zu setzen.
</para>
<sect2 id="zend.log.formatters.simple">
<title>Eingache Formatierung</title>
<para>
<classname>Zend_Log_Formatter_Simple</classname> ist der Standard Formatter. Er ist
automatisch konfiguriert wenn kein Formatter definiert wird. Die Standard Konfiguration
ist identisch mit dem folgenden:
</para>
<programlisting language="php"><![CDATA[
$format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);
]]></programlisting>
<para>
Ein Formatter wird einem individuellen Writer Objekt gesetzt durch Verwenden der
<methodname>setFormatter()</methodname> Methode des Writer's:
</para>
<programlisting language="php"><![CDATA[
$writer = new Zend_Log_Writer_Stream('php://output');
$formatter = new Zend_Log_Formatter_Simple('Hallo %message%' . PHP_EOL);
$writer->setFormatter($formatter);
$logger = new Zend_Log();
$logger->addWriter($writer);
$logger->info('dort');
// Gibt "Hallo dort" aus
]]></programlisting>
<para>
Der Konstruktor von <classname>Zend_Log_Formatter_Simple</classname> akzeptiert einen
einzelnen Parameter: Den Format String. Dieser String enthält Schlüssel die durch
Prozentzeichen begrenzt sind (z.B. <command>%message%</command>). Der Format String kann
jeden Schlüssel des Event Data Arrays enthalten. Die Standardschlüssel können durch
Verwendung der DEFAULT_FORMAT Konstante von
<classname>Zend_Log_Formatter_Simple</classname> empfangen werden.
</para>
</sect2>
<sect2 id="zend.log.formatters.xml">
<title>In XML formatieren</title>
<para>
<classname>Zend_Log_Formatter_Xml</classname> formatiert Log Daten in einen
<acronym>XML</acronym> String. Standardmäßig loggt er automatisch alle Elemente des
Event Data Arrays:
</para>
<programlisting language="php"><![CDATA[
$writer = new Zend_Log_Writer_Stream('php://output');
$formatter = new Zend_Log_Formatter_Xml();
$writer->setFormatter($formatter);
$logger = new Zend_Log();
$logger->addWriter($writer);
$logger->info('Informative Nachricht');
]]></programlisting>
<para>
Der obige Code gibt das folgende <acronym>XML</acronym> aus (Leerzeichen werden für
Klarstellung hinzugefügt):
</para>
<programlisting language="xml"><![CDATA[
<logEntry>
<timestamp>2007-04-06T07:24:37-07:00</timestamp>
<message>Informative Nachricht</message>
<priority>6</priority>
<priorityName>INFO</priorityName>
</logEntry>
]]></programlisting>
<para>
Es ist möglich das Root Element anzupassen sowie ein Mapping von <acronym>XML</acronym>
Elementen zu den Elementen im Event Data Array zu definieren. Der Konstruktor von
<classname>Zend_Log_Formatter_Xml</classname> akzeptiert einen String mit dem Namen des
Root Elements als ersten Parameter und ein assoziatives Array mit den gemappten
Elementen als zweiten Parameter:
</para>
<programlisting language="php"><![CDATA[
$writer = new Zend_Log_Writer_Stream('php://output');
$formatter = new Zend_Log_Formatter_Xml('log',
array('msg' => 'message',
'level' => 'priorityName')
);
$writer->setFormatter($formatter);
$logger = new Zend_Log();
$logger->addWriter($writer);
$logger->info('Informative Nachricht');
]]></programlisting>
<para>
Der obige Code ändert das Root Element von seinem Standard <property>logEntry</property>
zu <property>log</property>. Er mappt auch das Element <property>msg</property> zum
Event Daten Element <property>message</property>. Das ergibt die folgende Ausgabe:
</para>
<programlisting language="xml"><![CDATA[
<log>
<msg>Informative Nachricht</msg>
<level>INFO</level>
</log>
]]></programlisting>
</sect2>
</sect1>
|