<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.log.writers.zendmonitor">
    <title>Auf den Zend Server Montior schreiben</title>

    <para>
        <classname>Zend_Log_Writer_ZendMonitor</classname> erlaubt es Events über Zend Server's
        Monitor <acronym>API</acronym> zu loggen. Das erlaubt es die Log Nachrichten für die
        Umgebung einer komplette Anwendung an einem einzelnen Ort zu sammeln. Intern verwendet es
        einfach die <methodname>monitor_custom_event()</methodname> Funktion der Zend Monitor
        <acronym>API</acronym>.
    </para>

    <para>
        Ein relativ nützlichen Feature der Monitor <acronym>API</acronym> ist das Sie es erlaubt
        beliebige eigene Informationen zusammen mit der Log Nachricht zu spezifizieren. Wenn man zum
        Beispiel eine Exception loggen will, kann man nicht nur die Exception Nachricht loggen,
        sondern auch das komplette Exception Objekt an die Funktion übergeben, und das Objekt dann
        im Zend Server Event Monitor inspizieren.
    </para>

    <note>
        <title>Zend Monitor muss installiert und aktiviert sein</title>

        <para>
            Um diesen Log Writer zu verwenden muss Zend Monitor sowohl installiert als auch
            aktiviert sein. Trotzdem ist er so designt dass, wenn Zend Monitor nicht gefunden wurde,
            er einfach als <constant>NULL</constant> Logger agiert.
        </para>
    </note>

    <para>
        Die Instanzierung des <classname>ZendMonitor</classname> Log Writers ist trivial:
    </para>

    <programlisting language="php"><![CDATA[
$writer = new Zend_Log_Writer_ZendMonitor();
$log    = new Zend_Log($writer);
]]></programlisting>

    <para>
        Dann können Nachrichten einfach wie gewohnt geloggt werden:
    </para>

    <programlisting language="php"><![CDATA[
$log->info('Das ist eine Nachricht');
]]></programlisting>

    <para>
        Wenn man zusätzliche Informationen spezifizieren will, die mit dem Event geloggt werden
        sollen, können diese Informationen in einem zweiten Parameter übergeben werden:
    </para>

    <programlisting language="php"><![CDATA[
$log->info('Exception gefunden', $e);
]]></programlisting>

    <para>
        Der zweite Parameter kann ein Skalar, Objekt oder ein Array sein; wenn man mehrere Teile an
        Informationen übergeben will, ist der beste Weg diese als assoziatives Array zu übergeben.
    </para>

    <programlisting language="php"><![CDATA[
$log->info('Exception gefunden', array(
    'request'   => $request,
    'exception' => $e,
));
]]></programlisting>

    <para>
        Im Zend Server wird das Event als "eigenes Event" (custom) geloggt. Vom "Monitor" Tab muss
        das "Events" Sub-Element ausgewählt werden und dann der Filter aus "Custom" um eigene Events
        zu sehen.
    </para>

    <para>
        <inlinegraphic fileref="figures/zend.log.writers.zendmonitor-events.png" format="PNG" />
    </para>

    <para>
        Events im Dashboard von Zend Server's Monitor
    </para>

    <para>
        In diesem Screenshot sind die ersten zwei angeführten Events eigene Events die über den
        <classname>ZendMonitor</classname> Log Writer geloggt wurden. Man kann anschließend auf ein
        Event klicken um alle Ihr zugehörigen Informationen zu sehen.
    </para>

    <para>
        <inlinegraphic fileref="figures/zend.log.writers.zendmonitor-event.png" format="PNG" />
    </para>

    <para>
        Event Detail in Zend Server's Monitor
    </para>

    <para>
        Wenn auf das Sub-Tab "Custom" geklickt wird, werden alle extra Informationen angezeigt die
        durch die Übergabe des zweiten Arguments an die Logging Methode geloggt wurden. Diese
        Informationen werden als <varname>info</varname> Unterschlüssel geloggt; man kann sehen das
        in diesem Beispiel das Request Objekt geloggt wurde.
    </para>

    <note>
        <title>Integration mit Zend_Application</title>

        <para>
            Standardmäßig fügen die Kommandos <command>zf.sh</command> und <command>zf.bat</command>
            die Konfguration für die <link
                linkend="zend.application.available-resources.log"><classname>Zend_Application</classname>
                Log Ressource</link> hinzu, welcher die Konfiguration für den
            <classname>ZendMonitor</classname> Log Writer enthält. Zusätzlich verwendet der
            <classname>ErrorController</classname> den konfigurierten Logger um Exceptions der
            Anwendung zu loggen -- und bietet deshalb standardmäßig die Integration für Events im
            Zend Monitor.
        </para>

        <para>
            Wie vorher erwähnt fungiert der Logger, wenn die Monitor <acronym>API</acronym> in der
            eigenen <acronym>PHP</acronym> Anwendung nicht erkannt wurde, als
            <constant>NULL</constant> Logger.
        </para>
    </note>
</sect2>
