ECMind GmbH

Talend® Components for enaio®: Logging

Abseits von reiner Entwicklung für enaio® bieten die Logging-Komponenten aus unserem Satz eine Reihe von Vorteilen gegenüber der Standardlösung, welche mit Talend ausgeliefert werden: Das Logging kann mit SLF4J-Mittel umfangreich konfiguriert und auf die Bedürfnisse im Alltag angepasst werden.


Download der Beispiel-Strecken
2017-07-25-LoggingExampleJobs.zip (45.98KB)
Download der Beispiel-Strecken
2017-07-25-LoggingExampleJobs.zip
(45.98KB)

In folgendem Beispiel wird in einem Hauptjob das Logging initiiert und über eine fiktive Datenbank (hier via tRowGenerator) eine Liste von Namen und Altersangaben an einen Subjob übergeben. Dieser erzeugt E-Mail-Adressen und Warnungen bei Personen jünger als 18 Jahre und (für die Beispielstrecke bewusst) Fehler durch eine nicht abgefangene Ausnahme bei Vornamen mit weniger als sechs Buchstaben Länge: 

Die Komponenten erlauben das Logging über Strecken und Substrecken hinweg. Jeweils auf den Strecken sind wie hier gezeigt an einen tLogCatcher die neue Komponente LoggingCatch zu knüpfen. Auf dem Hauptjob ist eine LoggingInit-Komponente einzubinden, welche die Log-Konfiguration ermöglicht.


Es werden zwei Logging-Backends angeboten, eine einfache Standardvariante (SLF4J «Simple») und eine umfangreich konfigurierbare Variante mit Logback-Backend.


Hier die Ansicht mit Logback-Konfiguration. Diese kann in die Strecke eingebettet werden oder aus einer Datei gelesen.


Hier die Standardkonfiguration der LoggingInit-Komponente mit Typ "Logback Logger" (markiert die in der Komponententabelle übergebenen Variablen, welche so z. B. aus dem Job-Kontext gefüllt werden können):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${JOBNAME}.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
            </Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_PATH}/${JOBNAME}.%d{yyyy-MM-dd}.%i.log
                        </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>    
    <root level="${LEVEL}">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>


Diese Bilder zeigen die Einstellungen der übrigen Komponenten:

tLogCatcher (Talend-Standardkomponente)


LoggingCatch (erwartet 1:1 das Schema von tLogCatcher)


Log-Ausgabe anstelle von tWarn/tDie mit Textersetzungsvariablen (SLF4J-Standard)




Hier die Subjob. Die Logging-Ausgabe nutzt intensiv Textersetzung anstelle von der bei tWarn nötigen "String" + "Konkatenation"


tLogCatcher analog Hauptjob


LoggingCatch analog Hauptjob



Hier ein Beispiel-Output für die Konfiguration mit Logback:

Erzeugtes Verzeichnis mit Output, die Dateien werden selbstständig nach x Megabyte bzw. täglich umbenannt. Weiterverarbeitung wie z. B. Kompression sind konfigurierbar (Logback).

Ausgabedatei