configure log4j to log to custom file at runtime

Viewed 96871

Can anyone please guide me as to how I can configure log4j to log to a specific file that I specify at run-time.The name and path of the log file are generated at run-time and the application must log to that particular file.

Generally file appender entries in the log4j.properties file points to the log file that will be used by the application.However in this case I would like to read the log file path from the command line and log to that particular file.

How can I achieve this ?

5 Answers

You can also do this from the log4j.properties file. Using the sample file below I have added the system property ${logfile.name}:

# logfile is set to be a RollingFileAppender
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${logfile.name}
log4j.appender.logfile.MaxFileSize=10MB
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%-5p]%d{yyyyMMdd@HH\:mm\:ss,SSS}\:%c - %m%n

The log file name can then be set two different ways:

  1. As a command line, system property passed to java "-Dlogfile.name={logfile}"
  2. In the java program directly by setting a system property (BEFORE you make any calls to log4j).

    System.setProperty("logfile.name","some path/logfile name string");

Just remove your log4j code and replace this code in your java class it's working good no need to add properties or xml file


SimpleDateFormat dateFormatsd = new SimpleDateFormat("dd-MM-yyyy-hh-mm");
String dateandtime=dateFormatsd.format(new Date());

SimpleLayout layout = new SimpleLayout(); 
RollingFileAppender appender = new RollingFileAppender(layout,".\\Logs\\log "+dateandtime+".txt",true);
                            appender.setMaxFileSize("20MB");
                            logger.addAppender(appender);

The above code will log the logs for every minute.

Thanks

Related