Udostępnij za pośrednictwem


DeployR log rotation to avoid large catalina.out

Are you facing a situation where your DeployR installations catalina.out file is growing huge after being in operation for a long time? DeployR has a webapp which is deployed on tomcat servlet container. Tomcat's default log file catalina.out has no rotation facility. So if tomcat has been running for a while without restarts which could be days or months, and application logs are not being directed to a different file, it can grow quite big and potentially cause disk space issues besides being difficult to sift through such a huge file. There are ways to indirectly rotate catalina.out but they can be difficult to implement (see: https://wiki.apache.org/tomcat/FAQ/Logging#Q10). The answer is to actually not log application logs to catalina.out but direct them to a custom file(s) using a logging framework like log4j.

DeployR uses log4j for logging but by default it is configured for the 'console' appender and goes to 'stdout' which means all of the log messages generated by DeployR webapp will go to Tomcat's catalina.out file which will keep growing until tomcat is restarted.

You can edit the deployr.groovy configuration file to direct the log messages to a custom file location using log4j's 'rollingFile' appender which will allow you to rotate the log file once it reaches a certain size.

Below is a sample configuration file to do that (replace the original log4j configuration block in deployr.groovy (restart tomcat after changing this):

log4j = {     appenders {         rollingFile name: 'myfile', maxFileSize: '10MB', maxBackupIndex:10,         file: 'C:\\Revolution\\DeployR-7.3\\Apache_Tomcat\\logs\\deployr.log',         layout: pattern(conversionPattern: '%d{yyyy-MM-dd HH:mm:ss.SSS} | %p | %c | %t | %m | %x%n')         console name: 'stdout', layout: pattern(conversionPattern: '[%5p %d{HH:mm:ss:S}] %c{1} %m%n')     }     root {         info "myfile"     }     error   'org.springframework',             'org.codehaus',             'org.apache',             'org.atmosphere',             'org.quartz',             'org.grails',             'grails.plugin',             'grails',             'net.sf' }

Based on the above configuration, the rollingFile appender, log4j will direct the log to 'C:\Revolution\DeployR-7.3\Apache_Tomcat\logs\deployr.log'. The 'maxFileSize' parameter determines at what size the log should be rotated. So in this case once deployr.log reaches the size of 10MB, it will be backed up to different file named 'deployr.log.1' and new logging will start to an empty deployr.log file (if a previously backed up file with same name exists, it will be renamed to 'deployr.log.2' and so on for each of the backed up log file). 'maxBackupIndex' refers to how many backed up files will be kept. Once number of backed up files reach the 'maxBackupIndex' value, the oldest of the file will be deleted (in this case  'deployr.log.10').