Ubuntu下,Apache的日志是默认自动切换的,这样避免日志文件太大,打不开或者性能不好,不像windows下Phpstudy的Apache的日志,不会自动切换,但是你会发现,在Apache的配置conf中,是找不到日志切换的选项和配置的,那么Ubuntu下是如何做到日志的自动切换的呢?
原来Ubuntu下有个logrotate,是用它来实现日志的自动切换的。
Ubuntu下,有个 /etc/logrotate.d,下面有个apache2目录,里面配置了apache2日志的切换,默认情况下,是这样的:
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if /etc/init.d/apache2 status > /dev/null ; then \
/etc/init.d/apache2 reload > /dev/null; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
然后你会迷惑,apache配置中没有logrotate的配置,在系统服务中也找不到logrotate的服务,那么logrotate是如何运行的呢?
答案是: crontab 计划任务。
原来,在crontab配置当中 /etc/cron.daily中有个apache2的配置,里面会对apache的log进行周期性的切换处理!
HTCACHECLEAN_MODE=daemon
HTCACHECLEAN_RUN=auto
HTCACHECLEAN_SIZE=300M
HTCACHECLEAN_PATH=/var/cache/apache2/mod_cache_disk
HTCACHECLEAN_OPTIONS=""
. /etc/default/apache-htcacheclean
[ "$HTCACHECLEAN_MODE" = "cron" ] || exit 0
htcacheclean ${HTCACHECLEAN_OPTIONS} \
-p${HTCACHECLEAN_PATH} \
-l${HTCACHECLEAN_SIZE}
最后说一句:如果要通过Apache配置来周期性切换日志,例如每天一个日志文件,可以更改CustomLog,如下:
windows下:
CustomLog "|bin/rotatelogs.exe -l logs/access.%Y.%m.%d.log 86400" combined
Linux下:
CustomLog "|bin/rotatelogs -l logs/access.%Y.%m.%d.log 86400" combined