nginx 日志配置
配置访问日志和错误日志,自定义日志格式
语法
access_log path [format]; error_log path [level];
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
access_log |
访问日志路径 | access_log /var/log/nginx/access.log; |
常用 |
error_log |
错误日志路径和级别 | error_log /var/log/nginx/error.log warn; |
常用 |
log_format |
自定义日志格式 | log_format main '...'; |
常用 |
access_log off |
关闭访问日志 | access_log off; |
进阶 |
示例
JSON 格式日志
log_format json_log escape=json '{
"time": "$time_iso8601",
"remote_addr": "$remote_addr",
"request": "$request",
"status": $status,
"body_bytes_sent": $body_bytes_sent,
"request_time": $request_time,
"upstream_response_time": "$upstream_response_time"
}';
access_log /var/log/nginx/access.json json_log;方便 ELK 等日志系统解析
按域名分日志
server {
server_name api.example.com;
access_log /var/log/nginx/api.access.log;
error_log /var/log/nginx/api.error.log;
}每个站点独立日志文件
静态资源不记日志
location ~* \.(css|js|jpg|png|gif|ico)$ {
access_log off;
expires 30d;
}减少日志量,静态资源不需要记录
常见错误
日志文件越来越大
配置 logrotate 定期轮转:/etc/logrotate.d/nginx
技巧
- 生产环境用 JSON 格式日志,方便后续分析
- error_log 级别从低到高:debug, info, notice, warn, error, crit
- 用 logrotate 管理日志轮转,避免磁盘撑满