I went to check out my apache2 logs
ls /var/log/apache2/
and I noticed that they were being automatically rotated (access.log, access.log.1, etc.) and compressed with gzip (access.log.2.gz, etc.). This seems to be the default Ubuntu configuration. I wanted to make find out more, and I found this helpful article about Ubuntu logs, including Apache2 Log info and some basic log rotation info
After reading through the info, I decided that I wanted to make a few changes. The log rotation happens via the brilliantly named logrotate command. It turns out that logrotate settings kept in 2 places.
Default logrotate settings
First, there are the default settings in /etc/logrotate.conf. You can view them with this command:
less /etc/logrotate.conf
You can read about the configuration parameters on the man page:
man logrotate
Or here: online logrotate man page
On my Ubuntu system, the default configuration is setup to rotate the logs weekly, keeping 4 weeks of backlogs. After 4 weeks, it will delete the oldest log file:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
# system-specific logs may be configured here
I wanted to make a few changes:
- save 1 year of backlogs
- use compression for the backlogs (to save space)
- delay compression. This will postpone compression of the previous log file to the next rotation cycle, allowing me to easily view last week’s log without having to uncompress it.
- change the default backlog file name to include the date. By default, the files are named numerically: logname.0, logname.1, logname.2, etc. I want to use YYYYMMDD instead of 0, 1 ,2 3.
So, I edited the default config file:
sudo nano logrotate.conf
And I did the following:
- change the rotate directive to 52 weeks
- uncomment the commented-out compress directive
- add the delaycompress command
- add the dateex directive
The modified file looks like this:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 52 weeks worth of backlogs
rotate 52
# create new (empty) log files after rotating old ones
create
# use the date in backlog filenames
dateext
# compress backlogs with a delay
compress
delaycompress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
# system-specific logs may be configured here
Application Specific Settings (eg: Apache2)
This handles the default settings. However, some applications set their own logrotate configuration. Look in /etc/logrotate.d to see the which applications override the default settings:
ls /etc/logrotate.d/
On my system, I wanted to make similar changes to the apache2 and mysql-server logs. Some of the changes were already there (eg: delaycompress directive) and others I had to add (eg: dateext directive).
With these changes made, my logs now rotate the way I want.






