<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 17133 -->
<!-- Reviewed: no -->
<sect1 id="zend.log.formatters">
  <title>Formatter</title>
  <para>
    Ein Formatter ist ein Objekt das dafür zuständig ist ein <code>event</code> 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:

      <programlisting language="php"><![CDATA[
$format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);
]]></programlisting>
    </para>

    <para>
      Ein Formatter wird einem individuellen Writer Objekt gesetzt durch verwenden der
      <methodname>setFormatter()</methodname> Methode des Writer's:

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

    <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. <code>%message%</code>). 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 XML String.
      Standardmäßig loggt er automatisch alle Elemente des Event Data Arrays:

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

    <para>
      Der obige Code gibt das folgende XML aus (Leerzeichen werden für Klarstellung hinzugefügt):

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

    <para>
      Es ist möglich das Root Element anzupassen sowie ein Mapping von XML 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:

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

      Der obige Code ändert das Root Element von seinem Standard <code>logEntry</code> zu
      <code>log</code>. Er mappt auch das Element <code>msg</code> zum Event Daten Element
      <code>message</code>. Das ergibt die folgende Ausgabe:

      <programlisting language="xml"><![CDATA[
<log>
  <msg>Informative Nachricht</msg>
  <level>INFO</level>
</log>
]]></programlisting>
    </para>

  </sect2>
</sect1>
