[ 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