0

On a special application event I need to roll log file and rename to specific file name that contains date and time.

This is function I use to roll file:

public void rollOver()
    {
        Enumeration el=  Logger.getRootLogger().getAllAppenders();

        while ( el.hasMoreElements() ) 
        {
            Appender a = (Appender) el.nextElement();

            if (a instanceof RollingFileAppender) 
                {
                ((RollingFileAppender) a).rollOver();
                }
        }
    }

This is log4j.properties configuration:

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=mylog.log
log4j.appender.logfile.Threshold=ALL
log4j.appender.logfile.MaxFileSize=100MB
log4j.appender.logfile.MaxBackupIndex=4
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %-4r [%t] %-5p %c %x - %m%n

Currently, after rollOver I have file with name mylog.log.1. How to make file to have name like mylog_YYYMMDD_HHmmSS.log?

vico
  • 17,051
  • 45
  • 159
  • 315

2 Answers2

1

Use the DailyRollingFileAppender instead of RollingFileAppender. See this question for details how to configure it: Setting a log file name to include current date in Log4j

Community
  • 1
  • 1
Aaron Digulla
  • 321,842
  • 108
  • 597
  • 820
  • +1, even better if OP just needs a stock filename, although they stated they wanted HHmmSS as well. – Dave Newton Oct 07 '13 at 15:50
  • Despite the name, the `DailyRollingFileAppender` supports the whole range of date/time formatting. It just rolls only once per day by default. Since the OP overrides the rollover, he can get several rollovers per day. – Aaron Digulla Oct 07 '13 at 15:57
  • But DailyRollingFileAppender does't have rollover. I must roll file according special event – vico Oct 30 '13 at 15:54
  • Why do you think "DailyRollingFileAppender does't have rollover"? – Aaron Digulla Oct 30 '13 at 16:05
0

Here as per requiment

  # Log levels
    log4j.rootLogger=DEBUG,CONSOLE,R
    # Appender Configuration
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    # Pattern to output the caller's file name and line number
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

    log4j.appender.R=org.apache.log4j.rolling.RollingFileAppender
    log4j.appender.R.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
    log4j.appender.R.RollingPolicy.FileNamePattern=./logs/file_%d{yyyy-MM-dd}.log
    # Layout for Rolling File Appender

    #log4j.appender.R.DatePattern='.'yyyy-MM-dd-HH'.log'

    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%d - %c - %p - %m%n