[
https://issues.apache.org/jira/browse/LOG4J2-385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13770290#comment-13770290
]
Porfirio Partida edited comment on LOG4J2-385 at 9/18/13 6:31 PM:
------------------------------------------------------------------
org.apache.logging.log4j.core.appender.rolling.PatternProcessor
Method: getNextTime(long, int, boolean)
It has issues logging Monthly because it detects the next variables:
{code}
final Calendar currentCal = Calendar.getInstance();
currentCal.setTimeInMillis(current);
final Calendar cal = Calendar.getInstance();
cal.set(currentCal.get(Calendar.YEAR), 0, 1, 0, 0, 0); // inits with
current year
cal.set(Calendar.MILLISECOND, 0);
....
if (frequency == RolloverFrequency.MONTHLY) {
increment(cal, Calendar.MONTH, increment, modulus);
nextTime = cal.getTimeInMillis();
cal.add(Calendar.MONTH, -1);
nextFileTime = cal.getTimeInMillis();
// Running on September the 17th (it doesn't matter the date)
// nextFileTime : 1357023600000 - Tue Jan 01 00:00:00 GMT-07:00
2013 //Only year is added
// nextTime : 1359702000000 - Fri Feb 01 00:00:00 GMT-07:00 2013
//Moving from Jan to Feb
return nextTime;
}
...
//Why is daily working then? because right after Monthly we have weekly (it
should be failing as well) and then daily comes as this:
...
//Next line is going to point to current date to determine the very
next lookup.
cal.set(Calendar.DAY_OF_YEAR, currentCal.get(Calendar.DAY_OF_YEAR));
if (frequency == RolloverFrequency.DAILY) {
increment(cal, Calendar.DAY_OF_YEAR, increment, modulus);
nextTime = cal.getTimeInMillis();
cal.add(Calendar.DAY_OF_YEAR, -1);
nextFileTime = cal.getTimeInMillis();
return nextTime;
}
...
{code}
In order to fix, we could move the line
{code} cal.set(Calendar.DAY_OF_YEAR, currentCal.get(Calendar.DAY_OF_YEAR));
{code}
to the top (before Year) and remove the elements as needed inside each if
statement, ie:
- remove month, day, time inside year
- remove day and time inside month
- remove time inside daily
etc..
OR
we can set current month at month level and add the week at week level, like
this:
{code}
if (frequency == RolloverFrequency.MONTHLY) {
+ cal.set(Calendar.MONTH, currentCal.get(Calendar.MONTH)); //moves
the date to today's month.
increment(cal, Calendar.MONTH, increment, modulus);
nextTime = cal.getTimeInMillis();
cal.add(Calendar.MONTH, -1);
nextFileTime = cal.getTimeInMillis();
return nextTime;
}
if (frequency == RolloverFrequency.WEEKLY) {
+ cal.set(Calendar.WEEK_OF_YEAR,
currentCal.get(Calendar.WEEK_OF_YEAR));//moves the week.
....
{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
>
> 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 start up 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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]