下面分几种常见场景,给你讲 如何修改 Nginx 日志格式,从“改配置”到“生效”一步一步来。
日志格式在 nginx.conf 或 虚拟主机配置文件 中定义,通常位置:
/etc/nginx/nginx.conf
/etc/nginx/conf.d/*.conf
/etc/nginx/sites-enabled/*
log_format语法:
log_format 格式名 格式内容;
http {
log_format main_json escape=json
'{'
'"time":"$time_iso8601",'
'"host":"$host",'
'"remote_addr":"$remote_addr",'
'"request":"$request",'
'"status":$status,'
'"body_bytes_sent":$body_bytes_sent,'
'"request_time":$request_time,'
'"http_referer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';
access_log /var/log/nginx/access.log main_json;
}
✅ escape=json:防止中文或特殊字符破坏 JSON(推荐)
| 变量 | 含义 |
|---|---|
$remote_addr |
客户端 IP |
$time_local |
本地时间 |
$time_iso8601 |
ISO8601 时间 |
$request |
请求行 |
$status |
HTTP 状态码 |
$body_bytes_sent |
响应体大小 |
$http_referer |
Referer |
$http_user_agent |
User-Agent |
$request_time |
请求总耗时 |
$upstream_response_time |
后端响应时间 |
例如改成:
log_format main
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time';
nginx -t
nginx -s reload
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example_access.log main_json;
location / {
proxy_pass http://backend;
}
}
❌ 不能自定义格式
只能改级别和路径:
error_log /var/log/nginx/error.log warn;
级别:
debug | info | notice | warn | error | crit | alert | emerg
nginx -s reloadlog_format xxx escape=json '{ ... }';
proxy_pass 后才有(如 $upstream_response_time)log_format json_log escape=json
'{'
'"time":"$time_iso8601",'
'"host":"$host",'
'"ip":"$remote_addr",'
'"method":"$request_method",'
'"uri":"$uri",'
'"status":$status,'
'"size":$body_bytes_sent,'
'"req_time":$request_time,'
'"ua":"$http_user_agent"'
'}';
如果你愿意,可以告诉我:
我可以直接给你一份 可直接用的配置。