Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating log4j log file for each run with Date and timestamp

Tags:

java

log4j

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
like image 370
Cyborgz Avatar asked Jul 11 '15 18:07

Cyborgz


People also ask

How do you create a new log file for each time the application runs log4j?

File with system properties name and some prefix text if you want. This will create a log file with current date time, something like this Log4jDemoApp-dd-MM-yyyy-hh-mm-ss. log every time we run the application. It will create the new file because for every run we are setting current date stamp in system properties.

Where are log4j logs stored?

The Log4j logging settings are stored in the file app_data /conf/server/log4j. properties, where app_data is the application data folder. You can edit this file directly on the server or open it by clicking Settings > Logging.

What is rolling file Appender in log4j?

Log4j2 RollingFileAppender is an OutputStreamAppender that writes log messages to files, following a configured triggering policy about when a rollover (backup) should occur. It also has a configured rollover strategy about how to rollover the file.


1 Answers

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..

like image 110
Ruben Avatar answered Sep 21 '22 00:09

Ruben