SamCle88
SamCle88

Reputation: 275

log4j2 periodically cleaning log file

I use log4j2 to log my programs. In my xml configuration file, I have this appender:

<RollingFile name="General" fileName="log/logs/giornale.log" filePattern="log/logs/log-%d{yyyyMMdd}.log">
    <PatternLayout>
        <Pattern>%d{HH:mm:ss,SSS} [%t] %-5level %logger{-1} - %msg%n</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy />
    </Policies>
</RollingFile>

What I need is a way to configure it, so that it will delete automatically all files older than n days.
I already found some questions like this, but they don't help, since they don't say how to do it via xml configuration.
To make it short, where exactly am I suppose to indicate parameters like "MaxBackupIndex" in the above snippet? Or which other parameter should I use (and where can I put it)?

Upvotes: 4

Views: 2924

Answers (2)

Naman
Naman

Reputation: 32036

You can add the DefaultRolloverStrategy to your xml as -

<RollingFile name="General" fileName="log/logs/giornale.log" filePattern="log/logs/log-%d{yyyyMMdd}.log">

  <PatternLayout>
    <Pattern>%d{HH:mm:ss,SSS} [%t] %-5level %logger{-1} - %msg%n</Pattern>
  </PatternLayout>

  <Policies>
    <TimeBasedTriggeringPolicy />
  </Policies>

  <DefaultRolloverStrategy max="<specify maximum archive count>"/>

</RollingFile>

As well you can use the combination of time and size based roll over for logs using -

<Policies>
    <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
    <SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>

..a sample configuration that uses a RollingFileAppender with both the time and size based triggering policies, will create up to 7 archives on the same day (1-7) that are stored in a directory based on the current year and month, and will compress each archive using gzip and will roll every 6 hours when the hour is divisible by 6

Upvotes: 2

VHS
VHS

Reputation: 10184

Add the following tag under 'RollingFile' tag. Remove the 'policies' tag. You probably don't need it.

  <DefaultRolloverStrategy>
    <Delete basePath="log/logs" maxDepth="2">
      <IfLastModified age="60d" />
    </Delete>
  </DefaultRolloverStrategy>

With this configuration, logs older than 60 days will be auto-deleted.

Refer to the log4j2 docs for more configuration information.

Upvotes: 8

Related Questions