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. Die ursprüngliche Beschreibung finden Sie hier.
In diesem Blogbeitrag zeigen wir, wie man ab der Version 7.3.1 das Logging konfigurieren kann.
Was geht nicht mehr ab Version 7.3.1 des Talend® Open Studio?
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.
Sobald diese Checkbox gesetzt ist, exportiert Talend® automatisch diese Log4j2-Konfiguration mit.
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 von Talend® Open Studio?
Die folgende Log4j2-Beispielkonfiguration verhält sich wie die bisherige Standardeinstellung der LoggingInit-Komponente im Lockback-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
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.
Bei Fragen stehen wir Ihnen jederzeit gerne zur Verfügung.