Web 服务器的 log 文件有几种?

通常 Web 服务器所谓的log文件,就是当浏览器载入一个页面时,会向服务器发出请求,服务器会做出适当的返回,而这些访问都会记录在 log 文件中。
log 文件是一个文本文件,下面是一个例子,各种不同的格式有不同的写法。

下面来介绍四种常见的格式

Common Log Format (CLF),也称之为 NCSA Common Format

这是一个标准化的格式,是最为常见的格式,一开始的时候是由 NCSA 定义的。绝大部分的 log 分析软件都接受该格式的文件。

例子:
127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

在Apache Web 服务器中的定义方式是这样的:

此处略去相关代码,请查看桌面标准版文章。

W3C Extended Logfile Format

一种可定制的Log格式,只收集用户所需的信息。

在Nginx服务器的配置文件中,我所用的格式是这样的:

可以看到收集的信息有下面这些项目:

remote_addr : 用户的 IP 地址,或者说客户机的 IP 地址。

remote_user : 用户名,用户若使用基本认证的话会有这个。

time_local : 本地时间

request : 请求的内容,包括是 GET 还是 POST,还是 HEAD,路径,何种HTTP格式,是 HTTP/1.1,还是HTTP/1.0,再或者是 HTTP/2.0。

status : 返回的状态码,比如200,301,403等等。

body_bytes_sent : 返回的字节数,就是有多少数据返回到客户浏览器。

http_referer : referer的网址。

http_user_agent : 来访的浏览器或者蜘蛛的 agent 是如何定义的。

http_x_forwarded_for : 记录通过代理,或者CDN访问时的原始用户 IP 地址。