Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

967
Views
logrotate: delete tomcat/jboss logs older than n days

I haven't found a solution to purge old tomcat or jboss logs or any other timestamped logs: catalog.log./server.log.. Basically these logs are rotated by jboss as: server.log, server.log.20131201, server.log.20131203 and so on.

Is there a way I can use logrotate to delete logs older than n days? I don't want to use find inside postrotate or tweak jboss/tomcat logging properties. I just want to know if logrotate can actually achieve this on it's own. I know it's not very productive but I am stuck with a problem where I need answer for this.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

If you don't want to use find inside postrotate, no, you can't.

logrotate treats every instance of server.log rotated by Tomcat/JBoss as a different file, and since they are unique, logrotate will rotate them only once. maxage - the directive that removes rotated logs older than n days - is only checked if the logfile is to be rotated, so that maxage is only executed once and can't keep track of the file's age.

However, if you change your mind about using find, logrotate can help you simplify the management of log files created by Tomcat and JBoss. I use it to compress and remove old files with a configuration file like this:

/path/to/logs/server.log.????-??-?? {
    compress
    compresscmd /usr/bin/bzip2
    nocreate
    nodateext
    ifempty
    missingok
    rotate 1
    size 0
    start 0
    lastaction
        # Remove rotated files older than 180 days
        find /path/to/logs -name 'server.log.????-??-??.0.bz2' -mtime +180 -exec rm {} \;
    endscript
}

where:

  • rotate 1 and compress rename and compress, say, server.log.20131201 to server.log.20131201.0.bz2. The 0 between the timestamp and the .bz2 extension comes from start 0.
  • size 0 makes sure that files are always renamed and compressed.
  • The lastaction block removes rotated files older than 180 days.
over 4 years ago · Santiago Trujillo Report

0

logrotate can manage your logs rotating them and eventually keeping a limited number of rotated logs. But AFAIK it can do it only for logs it manages directly. If your logs are already rotated by some other agent (i.e. Tomcat itself), logrotate can't do anything, simply because does not know anything about the rotation performed by something else.

So the answer is no, you can't use logrotate to delete logs not managed by itself (and I think is not even intended to do something like that).

over 4 years ago · Santiago Trujillo Report

0

You can put script to /etc/cron.daily. For example:

cat /etc/cron.daily/tomcat-rotate-logs

#!/bin/sh

# erasing tomcat logs older then 7 days

for x in $(find /var/log/tomcat/ -type f -mtime +7);
do
       rm "$x";
       logger -t TOMCAT-ROTATE-LOGS "Erasing $x [done]"; 
done

or create a logrotate config. For example: cat /etc/logrotate.d/tomcat

/var/log/tomcat/*.log {
        su tomcat tomcat
        copytruncate  
        daily  
        rotate 6  
        compress  
        missingok
}

"su tomcat tomcat" - stands for avoiding logrotate error on wrong permissions

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!