Mule ESB Application Logging mit Log4j2

Die Mule Runtime ermöglicht eine nahtlose Kommunikation verschiedener Anwendungen und Formate innerhalb und außerhalb des Unternehmensnetzwerks. Neben dem Austausch von Informationen ist eine solide Protokollierungsrichtlinie zur frühzeitigen Erkennung von Fehlern, Sicherheitsbedrohungen oder zu Audit- als auch für Debugging-Zwecken unerlässlich.

Mule setzt seit der Version 3.6 auf das Protokollierungssystem Apache Log4j2. Log4j2 ist die nachfolger Version der beliebten und einflussreichen log4j-Bibliothek, die seit vielen Jahren im Java-Ökosystem verwendet wird. Version 2 baut auf den Protokollierungsfunktionen des Vorgängers auf und enthält bedeutenden Verbesserungen, insbesondere im Bereich der Performance.

Nachfolgend wird die Konfiguration und Implementierung von Log-Meldungen innerhalb eines Mule ESB Services dargestellt.

Mule ESB - Flow Logger

Die Protokollkomponente <logger /> ermöglicht die Protokollierung von Nutz- und Metadaten während der Prozessierung. Durch den Log Level lässt sich die Protokollierung bedarfs und zielgerichtet für die Mule ESB Applikation festlegen.

<logger message="Processing message with id #[message.id] and payload #[payload]" level="INFO" doc:name="Logger"/>

Mule ESB - Java Logger

Eigene Komponenten erhalten durch die LogFactory Zugriff auf den Logger und können darüber Log-Meldungen absetzen.

Log logger = LogFactory.getLog(getClass());

if (logger.isInfoEnabled())
{
  logger.info("Processing event received.");
}

Mule ESB - Log4j2 Konfiguration

Das Protokollierungsverhalten eines Mule ESB Services wird durch die Konfigurationsdatei log4j2.xml definiert. Die Basiskonfiguration umfasst Angaben zu Loggingsystem, Log Pattern, Logger und Log-Level.

<?xml version="1.0" encoding="utf-8"?>
<Configuration>
    <Appenders>
        <RollingFile name="file" fileName="${sys:mule.home}${sys:file.separator}logs${sys:file.separator}service-experience-api.log"
                 filePattern="${sys:mule.home}${sys:file.separator}logs${sys:file.separator}service-experience-api-%i.log">
            <PatternLayout pattern="%d [%t] %-5p %c - %m%n" />
            <SizeBasedTriggeringPolicy size="10 MB" />
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <Loggers>

		<!-- Http Logger shows wire traffic on DEBUG -->
		<AsyncLogger name="org.mule.module.http.internal.HttpMessageLogger" level="WARN"/>

		<!-- JDBC Logger shows queries and parameters values on DEBUG -->
		<AsyncLogger name="com.mulesoft.mule.transport.jdbc" level="WARN"/>

        <!-- CXF is used heavily by Mule for web services -->
        <AsyncLogger name="org.apache.cxf" level="WARN"/>

        <!-- Apache Commons tend to make a lot of noise which can clutter the log-->
        <AsyncLogger name="org.apache" level="WARN"/>

        <!-- Reduce startup noise -->
        <AsyncLogger name="org.springframework.beans.factory" level="WARN"/>

        <!-- Mule classes -->
        <AsyncLogger name="org.mule" level="INFO"/>
        <AsyncLogger name="com.mulesoft" level="INFO"/>

        <!-- Reduce DM verbosity -->
        <AsyncLogger name="org.jetel" level="WARN"/>
        <AsyncLogger name="Tracking" level="WARN"/>

        <AsyncRoot level="INFO">
            <AppenderRef ref="file" />
        </AsyncRoot>
    </Loggers>
</Configuration>

Fazit

Mule ESB Runtime Komponenten ermöglichen es dem Entwickler die Protokollierung von fachlichen oder technischen Informationen innherhalb der Prozessierung sehr schnell und einfach anzuwenden. Eigenen Komponenten steht das Mule Logging Framework zur Nutzung bereit. Log4j2 erreicht durch Einsatz der asynchronen Logger auch bei vielen parallelen Log-Nachrichten einen sehr hohen Durchsatz. Eine Anbindung der Mule Server an Log Management Systeme ist Aufgrund der standardisierten Log4j2 Log-Ausgabe möglich. Dank Log4j2 fügt sich Mule ESB als Intergrationslösung in bestehende Protokollierungsrichtlinien eines Unternehmens ein.

Nach oben