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

Remko Popma commented on LOG4J2-435:
------------------------------------

To give everybody who is new to the discussion an idea of what has been 
implemented in master so far, the current implementation can handle user 
requirements like the below:

{quote}
I want to rollover every day at midnight, and delete files that match 
"archives/\*/app-\*.gz" and are 30 days old or older, but keep the most recent 
100 GB or the most recent 10 files, whichever comes first.
{quote}

This can currently be expressed in configuration as
{code}
<Configuration>
  <Properties>
    <Property name="baseDir">logs</Property>
  </Properties>
  <Appenders>
    <RollingFile name="RollingFile" fileName="${baseDir}/app.log"
          
filePattern="${baseDir}/archives/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
      <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
      <DefaultRolloverStrategy>
        <Delete basePath="${baseDir}/archives" maxDepth="2">
          <IfFileName glob="*/app-*.log.gz">
            <IfLastModified age="30d">
              <IfAny>
                <IfAccumulatedFileSize exceeds="100 GB" />
                <IfAccumulatedFileCount exceeds="10" />
              </IfAny>
            </IfLastModified>
          </IfFileName>
        </Delete>
      </DefaultRolloverStrategy>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>
{code}

This was about as simple as I could make it. There are limitations in that 
certain combinations of logical conditions cannot be expressed. I think the 
consensus above is that for more complexity users can use a script or provide 
their own condition. This was the idea to begin with so I think we are striking 
a good balance.

Users can create custom conditions by implementing the {{PathCondition}} 
interface.
{code}
public interface PathCondition {
    void beforeFileTreeWalk(); // ("reset", for stateful conditions like the 
accumlators)
    boolean accept(final Path baseDir, final Path relativePath, final 
BasicFileAttributes attrs);
}
{code}

Ralph asked for a ScriptCondition, which I have not got around to implementing 
yet. Otherwise everything is fully implemented, tested and documented in 
master. Please take a look.

> Feature request: auto-delete older log files 
> ---------------------------------------------
>
>                 Key: LOG4J2-435
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-435
>             Project: Log4j 2
>          Issue Type: Improvement
>            Reporter: Arkin Yetis
>            Assignee: Remko Popma
>              Labels: Rollover
>             Fix For: 2.5
>
>         Attachments: LimitingRolloverStrategy.java, SizeParser.java
>
>
> Original description:
> {quote}
> DefaultRolloverStrategy max attribute only applies if you have a %i in the 
> file pattern. This request is to enhance DefaultRolloverStrategy or another 
> appropriate component to allow a max number of files limit to apply across 
> days/months/years when a filePattern includes a date pattern.
> {quote}
> ----
> One of the most requested features is to add the ability to Log4j to "clean 
> up" older log files.  This usually means deleting these files, although it 
> could also mean moving them to a different location, or some combination of 
> these. 
> Users have different requirements for selecting the files to clean up. A 
> common request is the ability to keep the last X number of log files. This 
> works well if rollover is only date based but may give undesired results with 
> size based rollover. 
> Another factor to consider is that the directory containing the log files may 
> contain the log files for multiple appenders, or even files unrelated to 
> logging. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to