nginx日志分为access.log(访问日志)和error.log(错误日志)
默认的nginx的日志配置如下: log_format combined '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log combined;
一般都是写在http下面,server里面直接引用就可以
格式:log_format combined-name "..."
下面是默认的,也是无需设置的combined日志格式,access_log参数中如果不指定,则默认就是这个:
log_format combined '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
下面是常用的日志变量,可以由它们灵活搭配组成自定义的日志格式
注意:log_format指定设置的name名称在nginx配置文件中是不能重复的
$remote_addr, $http_x_forwarded_for 记录客户端IP地址 $remote_user 记录客户端用户名称 $request 记录请求的URL和HTTP协议(GET,POST,DEL,等) $status 记录请求状态 $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。 $bytes_sent 发送给客户端的总字节数。 $connection 连接的序列号。 $connection_requests 当前通过一个连接获得的请求数量。 $msec 日志写入时间。单位为秒,精度是毫秒。 $pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。 $http_referer 记录从哪个页面链接访问过来的 $http_user_agent 记录客户端浏览器相关信息 $request_length 请求的长度(包括请求行,请求头和请求正文)。 $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。 $time_iso8601 ISO8601标准格式下的本地时间。 $time_local 通用日志格式下的本地时间。可以写在http, server, location, if in location, limit_except中
格式:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
path是日志文件存放的路径
format是前面用log_format指定设置的日志格式的名称
buffer是设置内存缓冲区的大小
【1】常见的:
access_log logs/access.log main buffer=32k;
【2】不记录日志:
access_log off;
【3】使用默认格式:
access_log logs/access.log;或者access_log logs/access.log combined;
【4】日志文件路径可以包含变量(0.7.4版本之后支持) 如分割日志的时候就很有用,例如下面按照天分割日志记录
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") { set $year $1; set $month $2; set $day $3; }
access_log /usr/local/nginx/logs/host.access-$year-$month-$day.log main;
或者access_log如果是配置在server下面,可以在将日志记录在以这个server名字命名的日志文件中
access_log logs/$server_name.log combined; ($server_name是变量,代表当前server的名字)
但是如果日志文件路径中包含变量,会存在以下限制:
【限制1】nginx配置的用户要对日志目录有创建文件的权限,不然无法生成日志文件。
【限制2】缓冲将不会被使用
【限制3】性能需要参数进行优化
对于每一条日志记录,日志文件都将先打开文件,再写入日志记录,然后马上关闭。为了提高包含变量的日志文件存放路径的性能,须要使用open_log_file_cache指令设置经常使用的日志文件描述符缓存
open_log_file_cache指令主要用来设置含有变量的日志路径的文件描述符缓存,参考下面的介绍
open_log_file_cache max=N [inactive=time][min_uses=N][valid=time];
默认是禁止的,也就是open_log_file_cache off;
【max】:设置缓存中的最大文件描述符的数量,如果超过设置的最大文件描述符数量,则蚕蛹LRU算法清楚“较不常使用的文件描述符”
【inactive】:设置一个时间,如果再设置的时间内每日有使用此文件描述符,则自动删除此描述符,测参数为可选参数,默认的时间为10秒钟
【min_uses】:在参数inactive指定的时间范围内,如果日志文件超过被使用的次数,则将该日志文件的描述符计入缓存。默认次数为1
【valid】:设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否依然存在。默认时间为60秒
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
格式:error_log 日志文件路径 错误日志级别
默认:#error_log logs/error.log error;
Nginx 支持 将不 同 虚拟 主机 的 日志 存储 在 不同 的 位置, 这是 个 很有 特色 的 功能。
日志 中 默认 的 错误 级别:
· main 部分: error
· HTTP 部分: crit
· server 部分: crit
如下将/static/ 相关的错误日志都单独记录了
server { error_log /var/logs/nginx/example.com.error.log; location /static/ { error_log /var/logs/nginx/static-error.log debug; } }rewrite_log on; 开启后,它将发送所有的 rewrite 相关的日志信息到 error_log 文件中,使用 [notice] 级别。随后就可以在error_log 查看rewrite信息了。
server { error_log /var/logs/nginx/example.com.error.log; rewrite_log on; }
启用 或 禁用 404 错误 日志, 这个 指令 可以 用来 禁止 Nginx 记录 找 不到 robots. txt 和 favicon. ico 这类 文件 的 错误 信息。
语法: log_ not_ found on| off
默认值: on
使用 环境: debug_ points stop;
示例:
location = /favicon. ico { log_ not_ found off; }
