log_format为nginx设置日志格式

nginx服务器日志相关指令主要有两条

1.一条是log_format,用来设置日志格式.

2. 另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。

nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:

log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';

log_format的详细参数如下:

参数说明示例
$remote_addr客户端地址211.28.65.253
$remote_user客户端用户名称--
$time_local访问时间和时区18/Jul/2012:17:00:01 +0800
$request请求的URI和HTTP协议"GET /article-10000.html HTTP/1.1"
$http_host请求地址,即浏览器中你输入的地址(IP或域名)www.it300.com
192.168.100.100
$statusHTTP请求状态200
$upstream_statusupstream状态200
$body_bytes_sent发送给客户端文件内容大小1547
$http_refererurl跳转来源https://www.baidu.com/
$http_user_agent用户终端浏览器等信息"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocolSSL协议版本TLSv1
$ssl_cipher交换数据中的算法RC4-SHA
$upstream_addr后台upstream的地址,即真正提供服务的主机地址10.10.10.100:80
$request_time整个请求的总时间0.205
$upstream_response_time请求过程中,upstream响应时间0.002

举例配置文件:

#vim /usr/local/nginx/conf/nginx.conf

log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
	        '$status $body_bytes_sent "$http_referer" '
	        '"$http_user_agent" $http_x_forwarded_for '
	 '"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';

2. nginx日志格式

        日志对于统计排错来说非常有利的,nginx日志相关的配置如 access_log,log_format,open_log_file_cache,log_not_found,log_subrequest,rewrite_log,error_log.

        nginx有一个非常灵活的日志记录模式,每个几倍的配置可以有独立的访问日志。日志格式通过log_format命令来定义。ngx_http_log_module是用来定义请求日志格式的

2.1 access_log 指令 

语法:

access_log path [format [buffer=size [flush=time]]];
access_Log path format gzip[=level] [buffer=size] [flush=time];
access_log syslog:server=address[,parameter=value] [format];
access_log off;

默认值: access_log logs/access.log combined;
默认值:http,server,location,if in location, limit_except

gzip 压缩等级。

buffer 设置内存缓存区大小。

flush  保存在缓存区中的最长时间。

不记录日志: access_log off;

使用默认combined 格式记录日志 : access_log logs/access.log 或 access_log logs/access.log combined;

2.2 log_format指令

语法: log_format name string ...;

默认值: log_format combined "...";

配置段: http

name 表示格式名称,string 表示等义的格式。log_format 有一个默认的无需配置的combined日志格式,相当于apache的combined日志格式,如下所示

log_format combined '$remote_addr - $remote_user [$time_local] '
 ' "$request" $status $body_bytes_sent '
 ' "$http_referer" "$http_user_agent" ';

如果nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的ip地址了,$remote_addr获取反向代理的IP地址。反向代理服务器再转发请求的http头信息中,可以增加X-Forwarded-For信息,用来记录,客户端IP地址和客户端请求的服务器地址,如下

log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
 ' "$request" $status $body_bytes_sent '
 ' "$http_referer" "$http_user_agent" ';
123.125.71.86 - - [17/Jul/2015:15:24:23 +0800] "GET
/data/cache/forum_slide.js?GKl HTTP/1.1" 200 4082
"http://www.iyunv.com/forum.php?fid=54&digest=1" "Mozilla/5.0 (compatible;
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -

日志格式允许包含的变量注释如下:

$remote_addr,$http_x_forwarded_for  #记录客户端IP地址
$remote_user   #记录客户端用户名称
$request       #记录请求的URL和HTTP协议
$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  #通用日志格式下的本地时间

发送给客户端的响应头拥有"sent_http_". 比如$sent_http_content_range.

实例如下:

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '"$status" $body_bytes_sent
"$http_referer" '
 '"$http_user_agent"
"$http_x_forwarded_for" '
 '"$gzip_ratio" $request_time $bytes_sent
$request_length';
log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" '
 '"$status" $body_bytes_sent $request_time
$bytes_sent $request_length '
 '[$upstream_response_time]
[$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]';
open_log_file_cache max=1000 inactive=60s;
server {
 server_name ~^(www\.)?(.+)$;
 access_log logs/$2-access.log main;
 error_log logs/$2-error.log;
 location /srcache {
 access_log logs/access-srcache.log srcache_log;
 }
}
}

2.3 open_log_file_cache指令

语法:

open_log_file_cache max=N  [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;

默认值: open_log_file_cache off;

配置段: http,server,location

       对 于 每 一 条 日 志 记 录 , 都 将 是 先 打 开 文 件 , 再 写 入 日 志 , 然 后 关 闭 。 可 以 使 用 open_log_file_cache 来设置日志文件缓存(默认是 off),格式如下:

参数注释如下:

max: 设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive: 设置存活时间,默认是10s
min_uses: 设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符计入缓存重,默认是1次
valid:设置检查频率,默认是60s
off: 禁用缓存

实例如下:

open_log_file_cache_max=1000 inactive=20s valid=1m min_user=2;

2.4 log_not_found指令

语法: log_not_found on | off;

默认值: log_not_found on;

配置段: http, server, location 是否在 error_log 中记录不存在的错误。默认是。

2.5 log_subrequest指令

语法: log_subrequest on | off;

默认值: log_subrequest off;

配置段: http, server, location 是否在 access_log 中记录子请求的访问日志。默认不记录。

2.6 rewrite_log 指令

由 ngx_http_rewrite_module 模块提供的。用来记录重写日志的。对于调试重写规则建议 开启。 Nginx 重写规则指南

语法: rewrite_log on | off;

默认值: rewrite_log off;

配置段: http, server, location, if 启用时将在 error log 中记录 notice 级别的重写日志。

2.7 error_log 指令

语法: error_log file | stderr | syslog:server=address[,parameter=value] [debug | info |  notice | warn | error | crit | alert | emerg];

默认值: error_log logs/error.log error;

配置段: main, http, server, location 配置错误日志。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值