Talend® Open Studio: Logging ab Version 7.3.1

Ab der Version 7.3.1 des Talend® Open Studio stehen in Talend-Stecken standardmässig die Log4j2 und SLF4J-Bibliotheken im Classpath bereit. Dies macht unsere LoggingInit-Komponente inkompatibel - aber auch zu grossen Teilen obsolet.

Hier geht es darum, wie man ab der Version 7.3.1 das Logging konfigurieren kann.

Was geht nicht mehr ab der Version 7.3.1?

Durch die nun immer im Classpath befindlichen Bibliotheken kann die LoggingInit-Komponente die unterstützten Logger SLF4J SimpleLogger und Logback nicht mehr laden. Dies wird beim Starten einer Talend®-Strecke über folgende Meldungen ersichtlich:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [.../org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [.../org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

Was geht weiterhin?

Die anderen Logging-Komponenten Logging und LoggingCatcher funktionieren weiterhin, da diese von Anfang an auf die SLF4J-Bibliothek gesetzt haben.

Was ist neu?

Neu ist die Option Log4j in den Projekt-Einstellungen, in denen man Log4j für alle Strecken aktivieren und eine Log4j-XML-Konfiguration als Standard hinterlegen kann.


Projekt-Einstellungen > Log4j

Sobald diese Checkbox gesetzt ist, exportiert Talend® automatisch diese Log4j2-Konfiguration mit.

Job Exportbeispiel mit log4j2.xml

Die Talend®-Basiskomponenten tWarn und tDie loggen mit gesetzte Checkbox selbständig in SLF4J. Gleiches gilt für Java-Exceptions. Daher wird so die Komponente LoggingCatcher nicht mehr benötigt.

Wie konfiguriert man das Logging?

Die folgende Log4j2-Beispielkonfiguration verhält sich wie die bisherige Standardeinstellung der LoggingInit-Komponente im Logback-Modus:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>  
    <Appenders>  
        <Console name="STDOUT" target="SYSTEM_OUT">  
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n" />
        </Console>  
        
        <RollingFile name="FILE" fileName="${sys:log_path}/${sys:jobname}.log" filePattern="${sys:log_path}/${sys:jobname}.%d{yyyy-MM-dd}.%i.log">
            <PatternLayout >
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB" />
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
        </RollingFile>
    </Appenders>  
    
    <Loggers>  
        <Root level="INFO">
            <AppenderRef ref="STDOUT" />  
            <AppenderRef ref="FILE" />  
        </Root>  
    </Loggers>  
</Configuration>

Es wird im Level INFO sowohl auf die Konsole wie auch in eine Datei protokolliert. Die Datei wird alle 10 MB beziehungsweise täglich rotiert.

Die Systemparameter müssen neu per -D-JVM-Argumenten übergeben werden:

-Dlog_path=d:/test/logs/
-Djobname=MyJobName


Parameterübergabe an Log4J

Zusätzlich kann auch der Pfad zu einer alternativen log4j2.xml angegeben werden:

-Dlog4j.configurationFile=c:/log4j2.xml

In der Strecke können die Variablen leider nicht mehr gesetzt werden, da das Logging vor der ersten Komponente initialisiert wird.

Achtung: Bitte beachtet dazu den Post zur Log4Shell-Thematik: CVE-2021-44228: log4j JNDI Attack

1 Like

Hinweis: Die Links im Original-Post, welche auf die Dokumentation zeigen, stimmen teilweise nicht mehr. Alle Beschreibungen zu den Komponenten findet Ihr hier: