我可以在 Nginx 上指定自定义日志格式access_log
,但它不适用于error_log
.
有没有办法做到这一点?
您不能指定自己的格式,但在 nginx 中内置了几个级别的 error_log-ing。
句法:error_log file [ debug | info | notice | warn | error | crit ]
默认:${prefix}/logs/error.log
指定记录服务器(和 fastcgi)错误的文件。
错误级别的默认值:
在我的 error_log 中,时间总是显示日志中每个错误字符串的 int begin。
有一个技巧。
我们知道我们可以自定义访问日志格式,但不能自定义错误日志格式。所以 hack 是,对于自定义的错误日志,我们只在发生错误时生成访问日志。
这可以使用 error_page 指令来完成。
http {
...
log_format custom_combined "...";
server {
...
error_page 50x @create_custom_error50x;
...
location @create_custom_error50x {
access_log path custom_combined;
return 50x;
}
}
}
当我想更改 nginx 错误日志的格式时(在这种情况下,当ngx.log
从 Lua 使用 openresty 的方法发送我自己的日志时)我使用的一个肮脏的技巧是在我自己的日志消息前加上足够的\b
(退格)字符来删除所有信息运行tail -f error.log
.
@Satys 上面的回答很有启发性。但是,他的示例可能会让您相信您必须提前选择一个特定的返回代码(例如,502
),然后return 502
在该段的末尾选择。这进一步意味着,如果您想处理第二个返回码(例如,404
),您需要在nginx.conf
.
使用 nginx v1.20.0,我可以像这样组合它们:
log_format my_format ...
server {
error_page 404 /404.html;
location = /404.html {
access_log /var/log/nginx/access_4xx_5xx.log my_format;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
access_log /var/log/nginx/access_4xx_5xx.log my_format;
}
...
}
上面的例子完成了以下工作:
error_page 404
映射到与映射到 ( )/404.html
不同的 HTML 页面 ( );这部分与开箱即用的 default 相同。这允许您根据不同的状态代码呈现不同的用户友好消息。error_page 500 502 503 504
/50x.html
nginx.conf
上面的两个段都记录到同一个自定义文件access_4xx_5xx.log
(并且都在 中my_format
)。这允许您将这些自定义日志合并到一个文件中,而不是让日志文件激增。
return 50x
每个段的末尾都没有。Nginx 只会返回原始状态码。