Apache Extras Companion for Log4j contains a RollingFileAppender, which can be configured to automatically compress old log files. We can even save the old, archived log files to another directory than the active log file. In this post we learn how we can add and configure the RollingFileAppender
in our Grails application.
First we must define our dependency on the Log4j Extras Companion libary. We open grails-app/conf/BuildConfig.groovy
and add to the dependencies
section the following code:
// File: grails-app/conf/BuildConfig.groovy ... grails.project.dependency.resolution = { ... dependencies { compile 'log4j:apache-log4j-extras:1.0' } } ...
Next we can configure the appender in grails-app/conf/Config.groovy
:
// File: grails-app/conf/Config.groovy import org.apache.log4j.rolling.RollingFileAppender import org.apache.log4j.rolling.TimeBasedRollingPolicy ... log4j = { def rollingFile = new RollingFileAppender(name: 'rollingFileAppender', layout: pattern(conversionPattern: "%d [%t] %-5p %c{2} %x - %m%n")) // Rolling policy where log filename is logs/app.log. // Rollover each day, compress and save in logs/backup directory. def rollingPolicy = new TimeBasedRollingPolicy(fileNamePattern: 'logs/backup/app.%d{yyyy-MM-dd}.gz', activeFileName: 'logs/app.log') rollingPolicy.activateOptions() rollingFile.setRollingPolicy rollingPolicy appenders { appender rollingFile } root { // Use our newly created appender. debug 'rollingFileAppender' } } ...
We use TimeBasedRollingPolicy, which is quite powerful. We can configure the rollover period using a date/time pattern. If the fileNamePattern
ends with .gz
the contents of the log file is compressed. Finally we decouple the active log file name from the location where the archived log files are saved with the property activeFileName
.