温馨提示×

nginx日志格式能改吗

小樊
47
2026-10-24 22:02:18
栏目: 编程语言

可以的,Nginx 的日志格式是可以自定义的。

1. 核心指令

  • log_format:定义日志格式
  • access_log:指定日志文件路径和使用的格式

2. 基本示例

在 http 块中定义格式:

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

    server {
        listen 80;
        server_name example.com;

        access_log /var/log/nginx/access.log main;
    }
}

3. 常用变量

  • $remote_addr:客户端 IP
  • $time_local:本地时间
  • $request:请求行
  • $status:HTTP 状态码
  • $body_bytes_sent:发送字节数
  • $http_user_agent:UA
  • $http_x_forwarded_for:代理 IP
  • $request_time:请求处理时间
  • $upstream_response_time:后端响应时间

4. JSON 日志格式(常用于日志采集)

log_format json escape=json '{'
    '"time":"$time_local",'
    '"ip":"$remote_addr",'
    '"method":"$request_method",'
    '"uri":"$request_uri",'
    '"status":$status,'
    '"size":$body_bytes_sent,'
    '"ua":"$http_user_agent"'
'}';

5. 注意事项

  • log_format 必须放在 http 块中
  • 修改后需 nginx -t && nginx -s reload
  • 不同 server / location 可使用不同格式
  • 高并发场景建议控制日志字段数量,减少 IO 开销

如果你有具体想记录的字段或日志系统(如 ELK、Loki),我可以帮你定制格式。

0 踩