[
https://issues.apache.org/jira/browse/LOG4J2-524?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13888459#comment-13888459
]
Remko Popma edited comment on LOG4J2-524 at 2/1/14 5:15 AM:
------------------------------------------------------------
I thought this might be a bug but it seems like everything works correctly. To
clarify:
the {{filePattern="app-%d\{yyyy-MM-dd}.%i.log"}} has two parts for rollover: a
date part ({{yyyy-MM-dd}}) and an index part ({{%i}}).
The date part is used by {{TimeBasedTriggeringPolicy}}.
The index part is used by {{SizeBasedTriggeringPolicy}} *if one is configured*.
If you configure both a SizeBased and a TimeBased triggering policy, then you
can have multiple rollovers within the same time period. In that case, the
{{<DefaultRolloverStrategy max="3"/>}} config will only keep the 3 most recent
rolled over files _within the same time period_.
For example, this config:
{code}
<RollingFile name="RollingFile" fileName="app.log"
filePattern="app-%d{yyyy-MM-dd_HH-mm-ss}.%i.log"> <!-- roll
over every second -->
<PatternLayout>
<Pattern>%d %p %c [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="5 b"/> <!-- roll over if log file size
exceeds 5 bytes -->
</Policies>
<DefaultRolloverStrategy compressionLevel="0" max="3"/>
</RollingFile>
{code}
With this test program:
{code}
Logger logger = LogManager.getLogger();
for (int i = 0; i < 20; i++) {
Thread.sleep(100);
logger.info("test " + i);
}
{code}
Gives this output:
{code}
app-2014-02-01_14-07-41.1.log
app-2014-02-01_14-07-41.2.log
app-2014-02-01_14-07-41.3.log
app-2014-02-01_14-07-42.1.log
app-2014-02-01_14-07-42.2.log
app-2014-02-01_14-07-42.3.log
app.log
{code}
The logic for removing old rolled-over log files is based on the file name, and
a file is only removed if a renaming action would result in a file name that
already exists. If you only have TimeBasedTriggeringPolicy, the renaming action
always results in a file name that does not exist yet, so older files are never
removed.
was (Author: [email protected]):
I thought this might be a bug but it seems like everything works correctly. To
clarify:
the {{filePattern="app-%d\{yyyy-MM-dd}.%i.log"}} has two parts for rollover: a
date part ({{yyyy-MM-dd}}) and an index part ({{%i}}).
The date part is used by {{TimeBasedTriggeringPolicy}}.
The index part is used by {{SizeBasedTriggeringPolicy}} *if one is configured*.
If you configure both a SizeBased and a TimeBased triggering policy, then you
can have multiple rollovers within the same time period. In that case, the
{{<DefaultRolloverStrategy max="3"/>}} config will only keep the 3 most recent
rolled over files _within the same time period_.
For example, this config:
{code}
<RollingFile name="RollingFile" fileName="app.log"
filePattern="app-%d{yyyy-MM-dd_HH-mm-ss}.%i.log"> <!-- roll
over every second -->
<PatternLayout>
<Pattern>%d %p %c [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="5 b"/> <!-- roll over if log file size
exceeds 5 bytes -->
</Policies>
<DefaultRolloverStrategy compressionLevel="0" max="3"/>
</RollingFile>
{code}
With this test program:
{code}
Logger logger = LogManager.getLogger();
for (int i = 0; i < 10; i++) {
Thread.sleep(100);
logger.info("test " + i);
}
{code}
Gives this output:
{code}
app-2014-02-01_14-07-41.1.log
app-2014-02-01_14-07-41.2.log
app-2014-02-01_14-07-41.3.log
app-2014-02-01_14-07-42.1.log
app-2014-02-01_14-07-42.2.log
app-2014-02-01_14-07-42.3.log
app.log
{code}
The logic for removing old rolled-over log files is based on the file name, and
a file is only removed if a renaming action would result in a file name that
already exists. If you only have TimeBasedTriggeringPolicy, the renaming action
always results in a file name that does not exist yet, so older files are never
removed.
> Rollover does not delete older rolled over files
> ------------------------------------------------
>
> Key: LOG4J2-524
> URL: https://issues.apache.org/jira/browse/LOG4J2-524
> Project: Log4j 2
> Issue Type: Bug
> Components: Appenders
> Affects Versions: 2.0-beta9
> Reporter: Remko Popma
> Fix For: 2.0-beta9
>
>
> This issue was raised by Kireet on the log4j-user mailing list:
> I am trying to use the rolling file appender in log4j2, basically I want to
> roll at midnight daily and keep 3 old log files. New files are created
> properly, but log4j doesn't seem to be cleaning up the old files. Does log4j
> only support cleanup of files within the time period? Here is the relevant
> portion of the config. I tried things with and without the %i pattern.
> {code}
> <RollingFile name="Event" fileName="app.log"
> filePattern="app-%d{yyyy-MM-dd}.%i.log">
> <PatternLayout>
> <Pattern>%m%n</Pattern>
> </PatternLayout>
> <Policies>
> <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
> </Policies>
> <DefaultRolloverStrategy compressionLevel="0" max="3"/>
> </RollingFile>
> {code}
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]