apache的日志有错误日志error.log和访问日志access.log,对于服务器的分析与维护是必不可少的.
在我们使用apche运行网站时,如果访问量较大,会发现apache中的log日志越来越大,有些日志达到了几个G大小,影响服务器的运行状态.
这些较大的日志一直被服务器占用着每次都会重新读取写入,读取较大文件时会让服务器运行变慢,需要我们手动停止服务器后删除,那么怎样才能切割日志让服务器的访问日志或错误日志按照指定规则自动分割重新创建呢?
apache的日志格式一般在httpd.conf配置文件中定义,LoadModule log_config_module modules/mod_log_config.so前面的#号需要去除.
我们使用的apache自带的分割工具rotatelogs,来对日志进行分割.
1、首先选择合适的日志格式
打开httpd.conf配置文件,一般在apache文件夹conf-文件夹中.
找到<If Module log_config_module>标签
CustomLog logs/access.log替换为
CustomLog "|bin/rotatelogs.exe -l logs/access_%Y%m%d.log 86400" combined
ErrorLog "logs/error.log"替换为
ErrorLog "|bin/rotatelogs.exe logs/%Y%m%d_error.log 86400 480"
日志的格式在双引号中指定,格式中的每一个变量代表一项特定信息,这些信息按照规则顺序写入到日志文件,其中%Y表示当前年%m当前月%d当前天,86400是默认值表示1天,480是6小时的时差,也就是说日志按照1天分割一次,这样每天日志就会重新被创建而不是继续使用前一天的日志记录.从而大大的减小了日志的大小.
其它一些参数:
%% 表示为符号"%"本身
%A 本地的星期名全称
%B 本地月份名
%H 24小时制2位数的小时数
%I 12小时制2位数的小时数
%M 2位分钟数
%S 2位数的秒数
%U 当星期日为星期一,2位数的一年中的星期数
%W 当星期日为星期一,2位数的一年中的星期数
%X 本地时间
%Y 4位数的年份
%Z 时区名
%a 本地3个字符的星期名
%b 本地3个字符的月份名
%c 本地日期和时间
%d 2位数的一个月中的日期数
%j 3位数的一年中日期数
%m 2位月份数
%p 本地12小时制的上下午
%w 当星期日为星期一,1位数的星期数
%x 本地日期
%y 2位数的年份
如果需要按照文件大小来分割日志的话也可以
CustomLog "|bin/rotatelogs.exe logs/access_%Y%m%d.log 5M" common
ErrorLog "|bin/rotatelogs.exe logs/%Y%m%d_error.log 5M"
其中的5M表示为日志文件为5Mb大小是自动分割.支持单位为K、M、G
同理:在配置网站时的网站的日志记录也可以使用该方法进行分割日志:
将:
<VirtualHost *:80>
DocumentRoot "D:/网站根目录"
ServerName 网站的域名
ErrorLog "logs/网站的域名-error.log"
CustomLog "logs/网站的域名-access.log" common
</VirtualHost>
更改为:
<VirtualHost *:80>
DocumentRoot "D:/网站根目录"
ServerName 网站的域名
ErrorLog "|bin/rotatelogs.exe -l logs/网站的域名-error-%Y-%m.log 86400"
CustomLog "|bin/rotatelogs.exe -l logs/网站的域名-access-%Y-%m.log 86400" common
</VirtualHost>
在windows服务器环境下的apache,因为使用外部的工具去分割日志,我们会在系统的进程里看到很多Apache rotatelogs command exe的进程,怎样才能减少这些进程呢?
这里我们需要用到apche的第三方日志模块:mod_log_rotate.so
可以到apache指定的外部地址去下载该模块
然后将该文件放在module目录中
在httpd.conf中添加
LoadModule log_rotate_module modules/mod_log_rotate.so
RotateLogs On
RotateLogsLocalTime On
RotateInterval 86400
语法与apache默认的差不多,代码如下:
ErrorLog logs/网站的域名-error-%Y-%m.log
CustomLog logs/网站的域名-access-%Y-%m.log common
与默认的工具区别主要在于一个需要写上|bin/rotatelogs.exe -l,模块不需要写上调用rotatelogs.exe.
以上就是在apache服务器中分割日志的一些方式.