uWSGI 启动日志格式为 json
uWSGI startup logs formatted as json
uWSGI 有一个选项可以禁用它是 运行 的应用程序的日志记录。这样,我可以从 Python 控制我的应用程序日志记录。然而,禁用这些仍然会以通常的格式保留 uWSGI 启动消息,例如
[uWSGI] getting INI configuration from /app/uwsgi.ini
*** Starting uWSGI 2.0.18 (64bit) on [Tue Nov 12 08:36:47 2019] ***
compiled with version: 8.3.0 on 12 November 2019 08:35:14
...
这些的问题是它们没有格式化为 json,这意味着所有日志消息在我的日志查看器 Google Stackdriver 中都显示为错误。
uWSGI 有一个用于 encoding/formatting 日志的选项,参见 here,特别是 log-encoder = json { ...
选项。
问题是,如果我使用上面的选项将日志编码为 json,具体如下,
log-encoder = json {"unix":${unix}, "msg":"${msg}"}
启动日志就这样消失了。
如何将启动日志格式化为 json?
uWSGI 具有三个日志消息来源:
- 应用程序日志(python 日志)
- uWSGI 服务器日志(有关服务器启动、错误、警告的信息)
- 请求日志
如果我做对了,你在第 2 点(uWSGI 服务器日志)下的日志有问题。
像这样的配置适合我:
logger = default stdio
log-route = default ^((?!\{).)*$
log-encoder = json:default {"time":"${micros}", "source":"uwsgi", "message":"${msg}"}
log-encoder = nl
您可以使用 logger-req
和 log-req-encoder
选项分别格式化请求日志。
更多关于 JSON 登录 uWSGI 和所有日志类型的完整配置可以找到 here
uWSGI 有一个选项可以禁用它是 运行 的应用程序的日志记录。这样,我可以从 Python 控制我的应用程序日志记录。然而,禁用这些仍然会以通常的格式保留 uWSGI 启动消息,例如
[uWSGI] getting INI configuration from /app/uwsgi.ini
*** Starting uWSGI 2.0.18 (64bit) on [Tue Nov 12 08:36:47 2019] ***
compiled with version: 8.3.0 on 12 November 2019 08:35:14
...
这些的问题是它们没有格式化为 json,这意味着所有日志消息在我的日志查看器 Google Stackdriver 中都显示为错误。
uWSGI 有一个用于 encoding/formatting 日志的选项,参见 here,特别是 log-encoder = json { ...
选项。
问题是,如果我使用上面的选项将日志编码为 json,具体如下,
log-encoder = json {"unix":${unix}, "msg":"${msg}"}
启动日志就这样消失了。
如何将启动日志格式化为 json?
uWSGI 具有三个日志消息来源:
- 应用程序日志(python 日志)
- uWSGI 服务器日志(有关服务器启动、错误、警告的信息)
- 请求日志
如果我做对了,你在第 2 点(uWSGI 服务器日志)下的日志有问题。
像这样的配置适合我:
logger = default stdio
log-route = default ^((?!\{).)*$
log-encoder = json:default {"time":"${micros}", "source":"uwsgi", "message":"${msg}"}
log-encoder = nl
您可以使用 logger-req
和 log-req-encoder
选项分别格式化请求日志。
更多关于 JSON 登录 uWSGI 和所有日志类型的完整配置可以找到 here