常用基础 - 日志 ¶
作者:KK
发表日期:2017.3.11
修改日期:2017.4.21
补充了按时间分割日志的小节
介绍 ¶
日志有访问日志和错误日志,配置其实不复杂,搞清楚关系和规则就好
其中在作用范围下又有主机日志和公共日志的区别,主机日志就是针对某个主机的日志,公共日志就是所有主机的相关日志信息都囊括的家伙
使用日志的前提 ¶
开启
LoadModule log_config_module modules/mod_log_config.so
这个模块加载命令,日志模块,你懂定义LogFormat
这个一般安装好默认就有的,你别动它就是,俺就是想告诉你这是前提要准备的
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common
主机日志 ¶
在主机里增加这样的命令
#错误日志
ErrorLog "/data/logs/kkh86.com-error.log"
#访问日志
CustomLog "/data/logs/kkh86.com-access.log" combined
两个命令分别用于定义不同的日志,并指定日志文件的路径即可
重启服务器后,只要主机被请求过,access日志就会有内容了
每个主机都可以定义自己的错误日志和访问日志保存路径
公共日志 ¶
所谓公共日志也就是把上面的ErrorLog
和CustomLog
两个命令放在外面,这样就不限于某一个主机了
前提是当主机没有定义日志的时候,一旦有请求或发生错误,日志才会被写到公共日志里
日志格式 ¶
在查看访问日志的时候,内容大概是这样的:
185.163.109.66 - - [11/Mar/2017:18:20:27 +0800] "GET / HTTP/1.1" 200 11063 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
日志的内容主要以空格隔开一个个元素,后面还有更多元素
这些元素其实是可以修改的,你要哪个不要哪个,甚至增加额外的其它元素都可以,定义这些元素的命令就是LogFormat
,比如
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
#语法
LogFormat 格式标记符
LogFormat的参数是一个字符串,用双引号引住,比如里面的%h
就是指host,表示请求来源,%t
是时间,%r
是请求行等等,相关的解释请见官方中文手册 - Apache模块 mod_log_config - 定制日志文件格式
需要定制的话就根据手册里的说明,修改配置文件的LogFormat即可
定义日志格式 ¶
LogFormat第2个参数是格式名称,可以自定义,apache通常会默认自带combined
和common
两个日志格式,你也可以自定义更多不同的格式,比如说
LogFormat "%h %t \"%r\" %>s" my-format
这样就定义了一个“my-format”,这个格式只记录了来源地址、时间、请求行和响应状态码
调用日志格式 ¶
定义了日志格式还要调用它才行,你不用那它就晾在那里发霉了亲
比如这样:
CustomLog "/data/logs/xxxx.log" my-format
就是通过CustomLog
命令第2个参数指定用哪个日志格式
按时间分割日志 ¶
按日期时间分割 ¶
如果不分割的话,apache就会一直往指定的日志文件路径里不断地写日志了,所以通常我们都会按时间分割日志
假设apache的安装目录在/usr/local/apache
,则配置日志时就这样写:
CustomLog "|/usr/local/apache/bin/rotatelogs /data/logs/xxx-%Y%m%d.log 1 480" my-format
重启后就会根据当前日期生成日志了
其实就是在日志路径前面增加了|/usr/local/apache/bin/rotatelogs
实现将日志处理转交给这个程序
注意后面还有1 480
这两个参数,由于文件名使用了%Y
、%m
和%d
这些时间变量,所以第一个数字参数在这种情况下是不会有任何作用的,所以写1,在这个阶段也不深入讲这块,照这样用就行了
第2个数字480就是基于UTC时间偏移多少分钟,这里480分钟就是8小时,按时间产生日志时就以中国时区作为标准