<?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>
