常用基础 - 日志

  • 作者:KK

  • 发表日期:2017.3.11

  • 修改日期:2017.4.21

    补充了按时间分割日志的小节


介绍

日志有访问日志和错误日志,配置其实不复杂,搞清楚关系和规则就好

其中在作用范围下又有主机日志公共日志的区别,主机日志就是针对某个主机的日志,公共日志就是所有主机的相关日志信息都囊括的家伙


使用日志的前提

  1. 开启LoadModule log_config_module modules/mod_log_config.so这个模块加载命令,日志模块,你懂

  2. 定义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日志就会有内容了

每个主机都可以定义自己的错误日志和访问日志保存路径


公共日志

所谓公共日志也就是把上面的ErrorLogCustomLog两个命令放在外面,这样就不限于某一个主机了

前提是当主机没有定义日志的时候,一旦有请求或发生错误,日志才会被写到公共日志里


日志格式

在查看访问日志的时候,内容大概是这样的:

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通常会默认自带combinedcommon两个日志格式,你也可以自定义更多不同的格式,比如说

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小时,按时间产生日志时就以中国时区作为标准