I have multiple instances of a thread class running at any given time. I have log4j setup to be used for logging needs.
I need a way to setup log4j so that every instance of my thread class outputs its log in a different log file.
Here is what I have done ( in pseudo code)
public class doSomething extends Thread {
private Logger d_logger;
public doSomething(int id){
d_logger = Logger.getLogger("doSomething"+id);
String logFileName = "doSomething"+id+".log";
Properties prop = new Properties;
prop.setProperty("doSomething"+id,"DEBUG, WORKLOG");
prop.setProperty("log4j.appender.WORKLOG","org.apache.log4j.FileAppender");
prop.setProperty("log4j.appender.WORKLOG.File", logFileName);
prop.setProperty("log4j.appender.WORKLOG.layout","org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.WORKLOG.layout.ConversionPattern","%d %c{1} - %m%n");
prop.setProperty("log4j.appender.WORKLOG.Threshold","INFO");
PropertyConfigurator.configure(prop);
}
public void run(){
d_logger.info("Starting to doSomething number" + id);
}
}
Though the above creates a file for every thread I instantiate, It does not output anything to those files. Any help is much appreciated.
The file is named log4j. properties and is located in the $DGRAPH_HOME/dgraph-hdfs-agent/lib directory. The file defines the ROLLINGFILE appenders for the root logger and also sets the log level for the file. The level of the root logger is defined as INFO and attaches the ROLLINGFILE appender to it.
It's not outputting anything to the files because the correct syntax for setting up a logger is:
prop.setProperty("log4j.logger.doSomething"+id,"DEBUG, WORKLOG");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With