apache日志文件太大怎么用日志滚动解决?

发布时间:2020-12-13编辑:脚本学堂
当apache日志文件太大时,可以采用rotatelogs日志回滚工具,或利用graceful启动apache,来控制apache日志文件的增长,感兴趣的朋友参考下。

apache中,经常会记录日志文件,例如:
ErrorLog "/home/zhangy/apache/www.test.com-error.log"
CustomLog "/home/zhangy/apache/www.test.com-access.log" common

随着网站访问量的上升,会遇到日志文件太大的问题,会影响网站性能,也不利日志文件分析,因此,将日志文件切割成小文件保存,然后定期清理旧的日志,不失为一个好选择。

这里介绍二种方法,来解决apache日志文件太大的问题。

1,rotatelogs这样日志回滚的工具

用法
rotatelogs  [ -l ] logfile  [ rotationtime [ offset ]] | [ filesizeM ]
-l 使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。
logfile 它加上基准名就是日志文件名。
如果logfile中包含"%",则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单位的".nnnnnnnnnn"后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime 日志文件滚动的以秒为单位的间隔时间。
offset 相对于UTC的时差的分钟数。如果省略,则假定为"0"并使用UTC时间。比如,要指定UTC时差为"-5小时"的地区的当地时间,则此参数应为"-300"。
filesizeM 指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。

解决方法:
ErrorLog "|/usr/local/apache2/bin/rotatelogs /home/zhangy/apache/www.test.com-error.log.%Y-%m-%d-%H_%M_%S 10M"
CustomLog "|/usr/local/apache/bin/rotatelogs /home/zhangy/apache/www.test.com-access.log 10M" commom
当日志大小达到10M时,日志就会滚动,产生新的日志。

也可以根据时间来进行滚动,把10M换成36000,表时日志10个小时滚动一次。
 

复制代码 代码示例:
[root@osxue apache]$ ls -tr |grep test
www.test.com-error.log
www.test.com-access.log
www.test.com-error.log.2010-11-05-14_50_00
www.test.com-access.log.1288968528
www.test.com-error.log.2010-11-05-14_48_20
www.test.com-access.log.1288968677
www.test.com-error.log.2010-11-05-14_56_40
www.test.com-error.log.2010-11-05-15_55_00
www.test.com-access.log.1288969444

2,利用graceful启动
优雅(graceful)方法重新启动,可以使服务器启用新的日志文件,而不丢失原来尚未写入的信息。

为此,有必要等待一段时间,让服务器完成正在处理的请求,并将记录写入到原来的日志文件。

以下是日志滚动和为节省存储空间而压缩旧日志的例子,其实这些日志也可以不要,看个人需要
 

复制代码 代码示例:
[root@osxue apache]$ find . -name "*osxue*" |xargs -i mv {} {}.bak
[root@osxue apache]$ sudo /etc/init.d/apache2 graceful
[root@osxue apache]$ sudo sleep 100
[root@osxue apache]$ find . -name "*.bak" |xargs -i tar czvf logbak.tar.gz {}
./www.osxue.com-access.log.bak
./www.osxue.com-error.log.bak