循环转存日志

其实我也不知道怎么翻译才好… 英文叫做 rotate log, 大概的意思是按照时间或大小将日志循环, 如果到了设定的日期或者日志的大小达到阀值之后, 就会自动将日志保存到别处, 然后开启一个新的日志, 这样就不会使得日志过于庞大. 如果按照时间循环的话, 就便于日志的整理和归档.

不仅是apache, 好多服务都可以这样弄, 配置文件都在/etc/logrotate.d/目录下:

  1. ls /etc/logrotate.d/
  2. apport dpkg php5-fpm rsyslog unattended-upgrades
  3. apt mysql-server pm-utils speech-dispatcher upstart
  4. cups-daemon nginx ppp ufw

作者在这里介绍了apache的配置:

  1. # vi /etc/logrotate.d/apache
  2. /usr/local/apache2/logs/access_log
  3. /usr/local/apache2/logs/error_log {
  4. size 100M
  5. compress
  6. dateext
  7. maxage 30
  8. postrotate
  9. /usr/bin/killall -HUP httpd
  10. ls -ltr /usr/local/apache2/logs | mail -s
  11. "$HOSTNAME: Apache restarted and log files rotated"
  12. ramesh@thegeekstuff.com
  13. endscript
  14. }

说明:

  • size 100M 当日志文件到了100M, 系统就会转存日志. 100M可以改成100K, 100G.
  • compress 压缩转存的日志文件
  • dateext 给转存过的日志文件名添加日期
  • maxage 说明转存的日志文件最多保存多久
  • postrotate and endscript 在这两个参数之间的命令将会在转存完毕后执行. 这里是把日志通过邮件发送了出去.

添加完了可以测试下效果:

  1. # /etc/cron.daily/logrotate

然后:

  1. # ls /usr/local/apache2/logs
  2. access_log
  3. error_log
  4. access_log-20110716.gz
  5. error_log-20110716.gz