I have the following logging problem with several Java applications using log4j
for logging:
I want log files to be rotated daily, like
log.2010-09-10
log.2010-09-09
log.2010-09-08
log.2010-09-07
log.2010-09-06
log.2010-09-05
log.2010-09-04
But for data security reasons we are not allowed to keep log files for longer than seven days at my company. So the generation of the next next log file log.2010-09-11
should trigger the deletion of log.2010-09-04
. Is it possible to configure such a behaviour with log4j
? If not, do you know another elegant solution for this kind of logging problem?
According to the following post, you can't do this with log4j: Use MaxBackupIndex in DailyRollingFileAppender -log4j
As far as I know, this functionality was supposed to make it into log4j 2.0 but that effort got sidetracked. According to the logback website, logback is the intended successor to log4j so you might consider using that.
There's an API called SLF4J which provides a common API to logging. It will load up the actual logging implementation at runtime so depending on the configuration that you have provided, it might use java.util.log or log4j or logback or any other library capable of providing logging facilities. There'll be a bit of up-front work to go from using log4j directly to using SLF4J but they provide some tools to automate this process. Once you've converted your code to use SLF4J, switching logging backends should simply be a case of changing the config file.
I came across this appender here that does what you want, it can be configured to keep a specific number of files that have been rolled over by date.
Download: http://www.simonsite.org.uk/download.htm
Example (groovy):
There is another option DailyRollingFileAppender. but it lacks the auto delete (keep 7 days log) feature you looking for
sample
I do come across something call org.apache.log4j.CompositeRollingAppender, which is combine both the features of the RollingFileAppender (maxSizeRollBackups, no. of backup file) and DailyRollingFileAppender (roll by day).
But have not tried that out, seems is not the standard 1.2 branch log4j feature.
Inspite of starting a chrone job, for the task, we can use log4j2.properties file in config folder of logstash. Have a look at the link below, this will be helpful.
https://github.com/elastic/logstash/issues/7482
I assume you're using RollingFileAppender? In which case, it has a property called
MaxBackupIndex
which you can set to limit the number of files. For example:log2j now has support to delete old logs. Take a look at DefaultRolloverStrategy tag and at a snippet below. It creates up to 10 archives on the same day, will parse the ${baseDir} directory that you define under the Properties tag at max depth of 2 with log filename matching "app-*.log.gz" and delete logs older than 7 days but keep the most recent 5 logs if your most recent 5 logs are older than 7 days.