首页  编辑  

Ubuntu下的Apache是如何自动切换日志文件的

Tags: /计算机文档/Linux & Unix/   Date Created:
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