Log4j rollover at restart

I am using the log4j FileAppender in my project to collect specific results. When my application restarts, I want to save the previous result file and start a new one. Is it possible?

For instance:

  • Run the application, write the results to results.log
  • The application completes
  • Restart the application, write the results to results_1.log
  • ...

I'v checked the DailyRollingFileAppender, but this is not exactly what I need, because it will automatically roll over to a specific date. I need to roll over when the application restarts.

+3
source share
4 answers

, ? , - , .

, . 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);
+1

, appender:

import org.apache.log4j.RollingFileAppender;

/**
   This appender rolls over at program start.
   This is for creating a clean boundary between log data of different runs.
*/
public class RunRolledFileAppender
    extends RollingFileAppender
{
  public RunRolledFileAppender() { }

  @Override
  public void activateOptions() {
    super.activateOptions();
    super.rollOver();
  }

  @Override
  public void rollOver() { }

}

, rollOver(), MaxFileSize Appender 10 , .

+1

ExternallyRolledFileAppender Roller .

:

import org.apache.log4j.Logger;
import org.apache.log4j.varia.Roller;
public class Test {
    private static final Logger log = Logger.getLogger(Test.class);
    public static void main(final String[] args) {
        Roller.main(new String[] {"localhost", "9999"});
        log.debug("Started application!");
    }
}

log4j.properties:

log4j.appender.file=org.apache.log4j.varia.ExternallyRolledFileAppender
log4j.appender.file.File=app.log
log4j.appender.file.Port=9999
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %t: %c: %m%n
log4j.rootLogger=DEBUG, file

ExternallyRolledFileAppender:

, . . , .

, Appender.

0

Log4j2 RollingFileAppender OnStartupTriggeringPolicy.

:

OnStartupTriggeringPolicy , JVM, .

xml ( 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>

: https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender.

0
source

All Articles