Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I setup log4j properties so that each thread outputs to its own log file?

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.

like image 403
Rohan Grover Avatar asked Jul 23 '09 14:07

Rohan Grover


People also ask

Where should log4j properties be placed?

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.


1 Answers

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");
like image 81
matt b Avatar answered Sep 28 '22 02:09

matt b