Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hello everyone,
I want to keep the log4j output in a file for each job. Is it possible to use a variable with the pattern "jobname_date_hour" for example ?
I tried to put in a TpreJob ====> tjava :
System.setProperty("logFilename", filename);
Where file name is a variable with the full path to the log file.
And added this in Project Settings ===> log4j :
<File name="MyFile" fileName="${sys:logFilename}">
<PatternLayout pattern="[%-5level] %d{HH:mm:ss} %logger{36}- %msg%n"/>
</File>
But i get this error :
ERROR FileManager (${sys:logFilename}) java.io.IOException: The filename, directory name, or volume label syntax is incorrect java.io.IOException: The filename, directory name, or volume label syntax is incorrect.
Is there a different way to assign the variable ?
Hi @Djallel BOUAKKAZ ,
My log4j xml :
<?xml version="1.0" encoding="UTF-8"?>
<Configuration >
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{HH:mm:ss} %logger{36}- %msg%n" />
</Console>
<File name="File" fileName="${sys:TalendJob.log}" >
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="WARN">
<AppenderRef ref="File" />
</Root>
</Loggers>
</Configuration>
at the begining of the job in a tjava :
Advanced settings tab :
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.LogManager;
in the basic settings :
String taljob = System.getProperty("TalendJob.log");
System.setProperty("TalendJob.log","C:\\coucou2.log");
org.apache.logging.log4j.core.LoggerContext ctx =(org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
ctx.reconfigure();
System.setProperty("TalendJob.log",taljob);
Send me love and kudos
Hi @Djallel BOUAKKAZ ,
My log4j xml :
<?xml version="1.0" encoding="UTF-8"?>
<Configuration >
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{HH:mm:ss} %logger{36}- %msg%n" />
</Console>
<File name="File" fileName="${sys:TalendJob.log}" >
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="WARN">
<AppenderRef ref="File" />
</Root>
</Loggers>
</Configuration>
at the begining of the job in a tjava :
Advanced settings tab :
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.LogManager;
in the basic settings :
String taljob = System.getProperty("TalendJob.log");
System.setProperty("TalendJob.log","C:\\coucou2.log");
org.apache.logging.log4j.core.LoggerContext ctx =(org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
ctx.reconfigure();
System.setProperty("TalendJob.log",taljob);
Send me love and kudos
at the end of the job you can delete the file in your workspace\ your job name \poms\jobs\process\your jobname + version\src\main\ext-resources
created at the begining of the job with sys:TalendJob.
you can get the full path with :
System.getProperty("TalendJob.log")
TFileDelete:
File Name : System.getProperty("TalendJob.log")
an other solution is to just make tfilecopy of the System.getProperty("TalendJob.log") file
Thank you so much for your answer I'm able to generate the file with the pattern I was looking for but I'm still getting this error :
2021-07-28 16:57:32,658 main ERROR FileManager (${sys:filename}) java.io.IOException: The filename, directory name, or volume label syntax is incorrect java.io.IOException: The filename, directory name, or volume label syntax is incorrect
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.WinNTFileSystem.canonicalize(Unknown Source)
at java.io.File.getCanonicalPath(Unknown Source)
at java.io.File.getCanonicalFile(Unknown Source)
at org.apache.logging.log4j.core.util.FileUtils.makeParentDirs(FileUtils.java:142)
at org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory.createManager(FileManager.java:429)
at org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory.createManager(FileManager.java:417)
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:113)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
at org.apache.logging.log4j.core.appender.FileManager.getFileManager(FileManager.java:182)
at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:96)
at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:52)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:579)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:651)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:668)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
at rmmdb_on_premise.testcopyfile_0_1.TestCopyFile.<clinit>(TestCopyFile.java:58)
2021-07-28 16:57:32,665 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.FileAppender for element File: java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory@458c1321] unable to create manager for [${sys:filename}] with data [org.apache.logging.log4j.core.appender.FileManager$FactoryData@11438d26] java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory@458c1321] unable to create manager for [${sys:filename}] with data [org.apache.logging.log4j.core.appender.FileManager$FactoryData@11438d26]
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:115)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
at org.apache.logging.log4j.core.appender.FileManager.getFileManager(FileManager.java:182)
at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:96)
at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:52)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:579)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:651)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:668)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
at rmmdb_on_premise.testcopyfile_0_1.TestCopyFile.<clinit>(TestCopyFile.java:58)
2021-07-28 16:57:32,683 main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.FileAppender for element File: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.FileAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.FileAppender
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:234)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:134)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:579)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:651)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:668)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
at rmmdb_on_premise.testcopyfile_0_1.TestCopyFile.<clinit>(TestCopyFile.java:58)
2021-07-28 16:57:32,688 main ERROR Null object returned for File in Appenders.
2021-07-28 16:57:32,707 main ERROR Unable to locate appender "File" for logger config "root"
The job then continue and execute till the end correctly. Do you also have the same error ? and how do I avoid it ?
you use [${sys:filename}] instead of "${sys:TalendJob.log}"
"${sys:TalendJob.log}" is one of the only variable wich is set before the creation of the log4j appenders and logger
filename will be created after so it crash
Thank you so much for your help. Now it works perfectly.
Also, is there some documentation on this ? this is my first time using log4j in Talend and I didn't find anything about the "TalendJob.log"
I search in the java code of a talend project.
the first thing that talend do is :
System.setProperty("TalendJob.log", "yourjobname.log");
then it create the logger
I'm French : j'espere que Talend va reduire le retard des trains 😉