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