How to configure log4j to only keep log files for the last seven days?

前端 未结 14 1434
北海茫月
北海茫月 2020-12-02 14:01

I have the following logging problem with several Java applications using log4j for logging:

I want log files to be rotated daily, like

         


        
相关标签:
14条回答
  • 2020-12-02 14:34

    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:

    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=example.log
    log4j.appender.R.MaxFileSize=100KB
    log4j.appender.R.MaxBackupIndex=7
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
    
    0 讨论(0)
  • 2020-12-02 14:39

    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):

    new TimeAndSizeRollingAppender(name: 'timeAndSizeRollingAppender',
       file: 'logs/app.log', datePattern: '.yyyy-MM-dd',
       maxRollFileCount: 7, compressionAlgorithm: 'GZ',
       compressionMinQueueSize: 2,
       layout: pattern(conversionPattern: "%d [%t] %-5p %c{2} %x - %m%n"))
    
    0 讨论(0)
  • 2020-12-02 14:39

    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

    0 讨论(0)
  • 2020-12-02 14:39

    The class DailyRollingFileAppender uses the DatePattern option to specify the rolling schedule. This pattern should follow the SimpleDateFormat conventions from Std. Ed. v1.4.2. So, we have to use E option (Day in week). For example:

    <param name="DatePattern" value="'.'EEE"/>
    

    See more about DailyRollingFileAppender class from log4j javadoc here. Unfortunately the Java 1.4.2 documentation is no longer online, but you can download a copy here.

    0 讨论(0)
  • 2020-12-02 14:44

    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.

      <DefaultRolloverStrategy max="10">
        <Delete basePath="${baseDir}" maxDepth="2">
          <IfFileName glob="*/app-*.log.gz">
            <IfLastModified age="7d">
              <IfAny>
                <IfAccumulatedFileCount exceeds="5" />
              </IfAny>
            </IfLastModified>
          </IfFileName>
        </Delete>
      </DefaultRolloverStrategy>
    
    0 讨论(0)
  • 2020-12-02 14:51

    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.

    0 讨论(0)
提交回复
热议问题