Gunicorn 访问日志格式详解与自定义
Gunicorn 访问日志默认类似 Apache combined 格式,用 --access-logformat 自定义:%(h)s 客户端 IP、%(r)s 请求行、%(s)s 状态码、%(D)s 响应微秒等。本文给出变量表与 JSON 格式示例。
Gunicorn 访问日志默认格式类似 Apache combined:%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s";用 --access-logformat 或配置文件的 access_log_format 自定义。
常用变量速查
| 变量 | 含义 |
|---|---|
%(h)s |
客户端 IP |
%(t)s |
时间 |
%(r)s |
请求行(方法+路径+协议) |
%(s)s |
状态码 |
%(b)s |
响应体字节数 |
%(f)s / %(a)s |
Referer / User-Agent |
%(D)s |
响应耗时(微秒) |
%(T)s |
响应耗时(秒) |
%({X-Forwarded-For}i)s |
任意请求头 |
自定义示例:输出 JSON
gunicorn app:app \
--access-logfile - \
--access-logformat '{"ip":"%(h)s","method":"%(m)s","path":"%(U)s","status":%(s)s,"duration_us":%(D)d,"ua":"%(a)s"}'
上述字符串模板不保证输出合法 JSON:请求路径、请求头等值需要由 JSON 序列化器正确转义。生产环境应使用调用 JSON 序列化器的自定义 logger/formatter,并测试特殊字符;合法 JSON 才能供日志平台直接解析,无需 grok。生产排障最有价值的补充变量是 %(D)s(响应耗时)。
常见问题(FAQ)
Q:修改后何时生效? 重启 Gunicorn,或在修改配置文件后向 master 发送受支持的 HUP 重载信号;--reload 主要用于开发时监视应用代码,不保证配置文件改动自动生效。
Q:能关掉访问日志只留错误日志吗? --access-logfile 不设置即关闭;错误日志用 --error-logfile。