6

All, it seems like this question is posted multiple times but still i haven't got proper solution for my problem. I referred this and this but its not working.

As per below property file, a new file is created everytime with date in it But I want to create a log file with below format and need to be generated each and everytime my application is executed,

logFileName_MM_DD_YY-HH_MM_SS.log (or) logFileName.log_YYYY_MM_DD_HH_MM_SS

# Root logger option
log4j.rootLogger=INFO,file,stdout

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=.\\logs\\AppLog.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Community
  • 1
  • 1
Cyborgz
  • 641
  • 1
  • 9
  • 18

2 Answers2

4

EDIT - removed the DailyFileAppender suggestion.

You can create your own FileAppender, like this:

public class NewFileOnRebootAppender extends FileAppender {

    public NewFileOnRebootAppender() {
    }

    @Override
    public void setFile(String file) {
        super.setFile(prependDate(file));
    }

    private static String prependDate(String filename) {
        return System.currentTimeMillis() + "_" + filename;
    }
}

And use it like this:

log4j.appender.fileOnReboot=yourPackage.NewFileOnRebootAppender
log4j.appender.fileOnReboot.File=appLogOnReboot.log
log4j.appender.fileOnReboot.layout=org.apache.log4j.PatternLayout
log4j.appender.fileOnReboot.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

The naming of the file is not perfect, but you get the idea..

Ruben
  • 3,986
  • 1
  • 21
  • 34
  • I have tried this one but the problem is it will create a new log file every minute i.e., if my application is running for 6 mins then 6 log file is created. but i need to have one log file created everytime my application is started. – Cyborgz Jul 12 '15 at 07:42
  • @Cyborgz you are right, of course. I have updated my answer. – Ruben Jul 12 '15 at 10:47
  • Tested and Worked fine!! Thank you! – Cyborgz Jul 19 '15 at 12:53
  • Note that this will behave a bit oddly if the File property contains path information, such as `File=log/foo.log`. Appending the date to the end rather than prepending to the beginning will fix this. – jstricker Feb 24 '16 at 18:05
0

One simple way to execute this is: 1.) setting a property in before hooks for the current timestamp.

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy-hh-mm-ss");
    System.setProperty("current.date.time", dateFormat.format(new Date()));

2.) Use this env variable property to create your logger file name log4j.appender.file.File=${user.dir}/logs/Logger_${current.date.time}.logs