日期:2014-05-17  浏览次数:20790 次

apache 日志按天记录

在apache的配置文件中找到
ErrorLog logs/error_log
CustomLog logs/access_log common

Linux系统配置方法:

将其改为?
ErrorLog "| /usr/local/apache/bin/rotatelogs /home/logs/www/%Y_%m_%d_error_log 86400 480"
CustomLog "| /usr/local/apache/bin/rotatelogs /home/logs/www/%Y_%m_%d_access_log 86400 480" common

Windows系统下配置方法:

#ErrorLog "|bin/rotatelogs.exe logs/vicp_net_error-%y%m%d.log 86400 480"
#CustomLog "|bin/rotatelogs.exe logs/vicp_net_access-%y%m%d.log 86400 480" common

第一次不知道设置480这个参数,导致日志记录时间和服务器时间相差8小时,原来是rotatelogs有一个offset参数,表示相对于UTC的时差分钟数,中国是第八时区,相差480分钟。86400是表示1天。

附rotatelogs说明

rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]

选项
logfile
它加上基准名就是日志文件名。如果logfile中包含’%',则它会被视为用于的strftime(3)的格式字串;否则,它会被自动加上以秒为单位的.nnnnnnnnnn后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime
日志文件回卷的以秒为单位的间隔时间
offset
相对于UTC的时差的分钟数。如果省略,则假定为0,并使用UTC时间。比如,要指定UTC时差为-5小时的地区的当地时间,则此参数应为-300。
filesizeM
指定回卷时以兆字节为单位的后缀字母M的文件大小,而不是指定回卷时间或时差。

?

?

假如你的apache的安装目录为/usr/local/apache_test/它的日志文件在/usr/local/apache_test/logs/下面,通常访问日志为access_log,那么如何来做呢?
???????? 1.在/etc/logrotate.d/目录下创建一个文件rotate_apache,运行命令touch rotate_apache(注:该文件用来告诉logrotate如何来按天轮循生成日志文件)
???????? 2.编辑该文件vi rotate_apache,输入以下内容:
/usr/local/apache_test/logs/access_log{
missingok
daily
rotate 10
postrotate
/bin/kill -HUP `cat /usr/local/apache_test/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
compress
}
3.OK了,就这么简单,之后你就会发现在apache的日志目录下会每天都产生一个文件,文件名如下:
??????????????? access_log.1.gz
??????????????? access_log.2.gz
??????????????? ………………..

???????? 这个工具(logrotate)以一种灵活的方式来对系统中的日志进行统一的管理,工作原理是这样的:它本身被加到了linux系统中的crontab中(但是我们从crontab -l中是看不到的),所以默认就会每天去执行一次,执行的配置文件为/etc/logrotate.conf,它会通过里面定义的内容来执行日志的切换工作,里面有好多可选的配置方式和参数。

?

?

cronolog

在apache的FAQ中,推荐了经过近2年发展已经比较成熟的一个工具cronolog:安装很简单:configure=> make=> make install

他的一个配置的例子会让你了解它有多么适合日志按天轮循:对httpd.conf做一个很小的修改就能实现:
TransferLog "|/usr/sbin/cronolog /var