Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

log4j rollover at restart

Tags:

java

log4j

I'm using a log4j FileAppender in my project to collect certain results. When my application restarts, I'd like to keep the previous resultsfile and start a new one. Is that possible?

For example:

  • Start application, write results to results.log
  • Application ends
  • Restart application, write results to results_1.log
  • ...

I'v checked out the DailyRollingFileAppender, but that's not really what I need because that will automatically rollover on a certain date setting. I need to rollover when the application restarts.

like image 472
EsTeGe Avatar asked Sep 16 '25 05:09

EsTeGe


2 Answers

Log4j2's RollingFileAppender has policy called OnStartupTriggeringPolicy.

As documentation states:

The OnStartupTriggeringPolicy policy causes a rollover if the log file is older than the current JVM's start time and the minimum file size is met or exceeded.

Example of xml configuration (only Policies):

<Policies>
  <OnStartupTriggeringPolicy />                # restart on startup of JVM
  <SizeBasedTriggeringPolicy size="20 MB" />   # restart file if log file reaches 20MB
  <TimeBasedTriggeringPolicy />                # restart if currend date don't mach date in log file name     
</Policies>

More informations and documentation: https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender

like image 179
franiis Avatar answered Sep 19 '25 15:09

franiis


How about having your application set the log file dynamically? You can do this by creating a file appender programatically when your application starts up and attaching it to your current logger.

For example, the following code will create new log files based on the current time. e.g. results_1336482894.log, results_1336486780.log

    Date now = new Date();
    FileAppender myFileAppender = new FileAppender();
    myFileAppender.setName("myFileAppender");
    myFileAppender.setFile("results_" + now.getTime() + ".log");
    myFileAppender.setLayout(new PatternLayout("%d %-5p [%t]: %m%n"));
    myFileAppender.setThreshold(Level.DEBUG);
    myFileAppender.activateOptions();

    Logger myLogger = Logger.getLogger("name of your logger"); //Or use getRootLogger() instead
    myLogger.addAppender(myFileAppender);
like image 42
GenericJon Avatar answered Sep 19 '25 13:09

GenericJon