Apache的配置文件(httpd.conf)中是存在着两个可调配的日志文件的:
- 访问日志access_log(在Windows上是access.log)
- 错误日志error_log(在Windows上是error.log)
使用 SSL 服务的话,还可能存在另外三种日志文件:
- ssl_access_log
- ssl_error_log
- ssl_request_log
Apache的配置文件=conf/httpd.conf:
#找到“CustomLog”这一行,可以修改apache访问日志路径
CustomLog logs/access_log combined
#找到“ErrorLog”这一行,可以修改apache错误日志路径
#非根“/”开头,位置是相对于ServerRoot目录的相对路径
ErrorLog logs/error.log
Apache访问日志详解
xx.xx.xx.xx – – [01/Apr/2023:10:03:06+0800] “GET /test/hello.html / HTTP/1.1” 200 738
- 远程主机IP:表明访问网站的是谁
- 空白(E–mail):为了避免用户的邮箱被垃圾邮件骚扰,第二项就用“–”取代了
- 空白(登录名):用于记录浏览者进行身份验证时提供的名字。
- 请求时间:用方括号包围,而且采用“公用日志格式”或者“标准英文格式”。 时间信息最后的“+0800”表示服务器所处时区位于UTC之后的8小时。
- 方法+资源+协议:服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。 METHOD: GET、POST、HEAD、…… RESOURCE: /、index.html、/default/index.php、……(请求的文件) PROTOCOL: HTTP+版本号
- 状态代码:请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。
- 发送字节数:表示发送给客户端的总字节数。它告诉我们传输是否被打断(该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
Apache访问日志配置
日志格式
apache中日志记录格式主要有两种,普通型(common)和复合型(combined),安装使用普通型(common)类型
combined和common的区别
combined模式会在每一条日志中提供客户端IP地址、客户端用户名、时间戳、请求方法、请求的URI、HTTP的状态码、发送给客户端的字节数以及Referrer和User–Agent信息等。
common模式只会提供客户端IP地址、客户端用户名、时间戳、请求方法、请求的URI、HTTP的状态码以及发送给客户端的字节数等信息,省去了Referrer和User–Agent信息。
日志参数
配置Apache访问日志格式主要有两个参数,即LogFormat指令和CustomLog指令
LogFormat指令:定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。
CustomLog指令:设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。
# 定义普通日志的格式和名字
LogFormat “%h %l %u %t “%r” %>s %b” common
#日志的保存位置及分类
CustomLog “logs/access.log” common
参数及具体解释:
- %h 远程主机,客户端 IP 地址
- %l 远程登录名
- %u 远程用户名
- %t 请求处理时间
- “%r” 请求第一行
- %>s 状态
- %b 传送字节
- %{format}i:标头信息,format 为指定的字符串;
- %{format}C:Cookie 的值,format 为指定的字符串;
- %{format}e:环境变量,format 为指定字符串;
- %{format}n:note 变量,format 为指定的字符串;
- %{format}o:标头信息,format 为指定的字符串;
- %a: 客户端 IP 地址;
- %A:服务器 IP 地址;
- %B:发送给客户端的字节数,如果为 0,则为 “–”;
- %D:请求处理的时间,以微秒为单位;
- %f: 请求处理的文件名;
- %H:请求使用的协议;
- %m:请求使用的方法;
- %p: 服务器端口;
- %q: 查询字符串;
- %T:请求处理时间,以秒为单位;
- %U:请求的 URL 路径;
- %v:请求的主机名;
- %V:请求的服务器名;
- %X:请求连接使用的协议;
- %I:发送给客户端的字节数,包含响应头;
- %O:从客户端接收的字节数,包含请求头;
Apache错误日志详解
[Thu Sep 22 22:29:59.952612 2022] [core:notice] [pid 1498] AH00052: child pid 9956 exit signal Bus error (7)
- 错误发生的日期和时间
- 错误的级别或严重性
- 导致错误的IP地址
- 错误信息本身
Apache常用功能
apache日志访问量都比较大,建议配置access_log每天生成一个日志文件
LogFormat “%h %l %u %t \”%r\” %>s %b“ common
CustomLog “|/usr/bin/rotatelogs /usr/local/apache/logs/access_log 86400“ common
/usr/bin/rotatelogs是什么?
rotatelogs是Apache的一个日志旋转脚本,它可以自动将Apache的日志文件定期更名和压缩,以避免单个日志文件过大而变得难以管理。
如果/usr/bin/rotatelogs不存在,建议检查apache/bin目录下是否存在