You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Remko Popma (JIRA)" <ji...@apache.org> on 2014/01/31 03:38:08 UTC

[jira] [Commented] (LOG4J2-385) Unable to roll log files monthly

    [ https://issues.apache.org/jira/browse/LOG4J2-385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13887396#comment-13887396 ] 

Remko Popma commented on LOG4J2-385:
------------------------------------

Team, what is the spec for rollover?
* Starting Oct 15, given monthly rollover, do we expect Nov 15 (add 1 month), or Nov 1st (1st day of next month)?
* Starting Tue March 4th, given weekly rollover, do we expect Tue March 11th (add 1 week)?
* Starting Tue March 4th 10:31, given hourly rollover, do we expect Tue March 4th 11:31 (add 1 hour) or Tue March 4th 11:00 (1st minute of next hour)?

{{PatternProcessor.getNextTime()}} currently gives interesting answers to these questions (yyyy/MM/dd format):
# Monthly rollover from 2014/01/31 gives 2014/02/{color:red}01{color}
# Monthly rollover from 2014/10/15 gives 2014/{color:red}02/01{color}
# Weekly rollover from 2014/03/4 Tue gives 2014/{color:red}01/08 Wed{color}
# Hourly rollover from 2014/03/04 10:31 gives 2014/03/04 11:{color:red}00{color}

Some JUnit tests:
{code}
@Test
public void testGetNextTimeMonthlyAddsOneMonthToSpecifiedTime() {
    PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz");
    Calendar initial = Calendar.getInstance();
    initial.set(2014, 9, 15, 10, 31, 59); // Oct 15th
    long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false);
    
    // Do we expect 1st day of next month?
    // Or do we add 1 month, and expect Nov 15?
    Calendar expected = Calendar.getInstance();
    expected.set(2014, 10, 15, 0, 0, 00);
    expected.set(Calendar.MILLISECOND, 0);
    assertEquals(format(expected.getTimeInMillis()), format(actual));
}

@Test
public void testGetNextTimeMonthlyAddsOneMonthOnLastDayOfMonth() {
    PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz");
    Calendar initial = Calendar.getInstance();
    initial.set(2014, 0, 31, 10, 31, 59); // 2014 Jan 31st
    long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false);
    
    // Expect last day of next month: 2014 Feb 28th
    Calendar expected = Calendar.getInstance();
    expected.set(2014, 1, 28, 0, 0, 00);
    expected.set(Calendar.MILLISECOND, 0);
    assertEquals(format(expected.getTimeInMillis()), format(actual));
}

@Test
public void testGetNextTimeWeeklyAddsOneWeekToSpecifiedTime() {
    PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-W}.log.gz");
    Calendar initial = Calendar.getInstance();
    initial.set(2014, 2, 4, 10, 31, 59); // Tue, March 4, 2014
    long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false);
    
    // expect Tue, March 11, 2014 (one week later)
    Calendar expected = Calendar.getInstance();
    expected.set(2014, 2, 11, 0, 0, 00);
    expected.set(Calendar.MILLISECOND, 0);
    assertEquals(format(expected.getTimeInMillis()), format(actual));
}

@Test
public void testGetNextTimeHourlyAddsOneHourToSpecifiedTime() {
    PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH}.log.gz");
    Calendar initial = Calendar.getInstance();
    initial.set(2014, 2, 4, 10, 31, 59); // Tue, March 4, 2014, 10:31
    long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false);
    
    // expect Wed, March 4, 2014, 11:31 (one hour later)
    Calendar expected = Calendar.getInstance();
    expected.set(2014, 2, 4, 11, 31, 00);
    expected.set(Calendar.MILLISECOND, 0);
    assertEquals(format(expected.getTimeInMillis()), format(actual));
}

private String format(long time) {
    String actualStr = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS").format(new Date(time));
    return actualStr;
}
{code}

> Unable to roll log files monthly
> --------------------------------
>
>                 Key: LOG4J2-385
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-385
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.0-beta8
>         Environment: Java 1.7.0_25, Windows 7 64bit, IntelliJ IDEA 12 Ultimate
>            Reporter: Ace Funk
>            Assignee: Remko Popma
>         Attachments: LOG4J2-385.patch
>
>
> Attempting to use FastRollingFile appender and configure log file rollover to occur monthly.  When {{filePattern="logs/app-%d\{yyyy-MM}.log.gz"}} is used, at application startup an archive file is created immediately (app-2013-01.log.gz) even if no log previously existed.  A log file is created, but only a single entry is made into the log.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org