日志文件太大,至少会带来3个问题:
1, 影响服务器的效率,日志文件太大,再往里面写日志就会非常效率地下;
2, 磁盘空间占用过多;
3, 日志太多,无法分析;
但是,我们又不能够不让Apache记录日志,除非我们完全不用分析日志。一个解决的思路是,让Apache每天生成新的日志文件。每天一个文件,管理起来会方便很多。
要达到这个目的,需要我们修改httpd.conf文件。
#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
#ErrorLog "logs/error.log"
ErrorLog "|bin/rotatelogs.exe -l logs/kerror.log 86400"
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
#CustomLog "logs/access.log" common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog "logs/access.log" combined
CustomLog "|bin/rotatelogs.exe -l logs/kaccess.log 86400" combined
</IfModule>
如上高亮的第9和45行是修改的配置,使用apache自带的rotatelogs.exe工具实现每天生成新日志。(我故意写成了kaccess.log,这个名字随便起)
这两行配置有3个特别注意的地方:
1, 一定要把.exe写出来;
2, 日志文件的名称如果含有%y%m%d,apache就会出错;(我在网络上找到的信息资料几乎都是说要这样给文件命名,但是在我这里就是不能成功,apache无法启动,提示net helpmsg 3547,最后自己研究rotatelogs.exe程序的命令参数,没有看到对于文件名能够支持%y%m%d这样的参数的说明,去掉%y%m%d之后,apache就可以正常启动了,生成的日志文件自带一个数字后缀。)
没有%y%m%d参数,生成的日志文件自带一个数字后缀。
没有%y%m%d参数,生成的日志文件自带一个数字后缀。
3, -l(小写的L),表示使用本地时间;86400就是一天的时间;
一个小经验
如果修改apache配置文件导致apache无法正常启动,可以去查error.log,就是错误日志,里面可能会有丰富的错误原因信息。