How to create a new log file for each time the application runs?
August 19, 2009
Recently I got a question from my blog reader Kuruba, regarding log4j logging. Kuruba is having a batch program with Log4j logging and he wants to send the log messages to a new log file each time his batch runs. This can be achieved by extending Log4j’s FileAppender, which is used for logging to a file, and adding our own customization to the file appender. Below I’m explaining how to do it.
Extending FileAppender to create a new log file for each application run:
Here’s the pseudo code for the logic we are going to implement.
Here is the code for the customize FileAppender, which will create a new log file, appender with the current timestamp, for each run of the application. Please note that this code is tested in Windows environment. So, please be cautious and do a testing when running this code in Unix or other environment.
Since we created a custom file appender, we need to tell the Log4j to use our custom file appender. For demo purpose, I configured this custom FileAppender as a rootLogger. So, all log messages will go to our file appender. Below is the sample log4j.properties file.
If you look at the property log4j.appender.fileout, our customized file appender is associated with this appender. We have also given a log file name ‘log.log’ in the above configuration file. So, with the above configuration, when you run your application, the log files will be generated in this fashion: logs-1250696128437.log, logs-1250696142828.log.