在 Nginx 中,日志格式是通过 log_format 指令定义的,然后在 access_log 指令中引用。下面从基础到常见示例给你讲清楚。
log_format)一般在 http 块中(通常是 nginx.conf 或 conf.d/*.conf):
http {
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
}
main 是日志格式的名字(可自定义)access_logserver {
access_log /var/log/nginx/access.log main;
}
也可以按 server 或 location 单独指定不同格式。
| 变量 | 说明 |
|---|---|
$remote_addr |
客户端 IP |
$time_local |
本地时间 |
$request |
请求行(方法 + URL + 协议) |
$status |
HTTP 状态码 |
$body_bytes_sent |
响应体大小 |
$http_referer |
来源页 |
$http_user_agent |
客户端 UA |
$request_time |
请求总耗时(秒) |
$upstream_response_time |
后端响应时间 |
$host |
请求的 Host |
$request_method |
请求方法(GET/POST) |
log_format json escape=json '{
"time": "$time_local",
"remote_addr": "$remote_addr",
"request": "$request",
"status": $status,
"request_time": $request_time,
"upstream_time": "$upstream_response_time",
"user_agent": "$http_user_agent"
}';
使用:
access_log /var/log/nginx/access.log json;
log_format proxy '$remote_addr - $http_x_forwarded_for - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent';
log_format perf '$remote_addr [$time_local] '
'"$request" $status '
'rt=$request_time urt=$upstream_response_time';
nginx -t # 检查配置
nginx -s reload
log_format 只能定义在 http 块buffer= 或 gzip 日志access_log /var/log/nginx/access.log main buffer=32k gzip=1;
如果你愿意,可以告诉我:
我可以直接帮你写一份可用的配置。