Python Flask 奇怪的日志记录行为 (kubernetes)

Python Flask weird logging behavior (kubernetes)

所以我制作了一个非常简单的基于 flask 的应用程序并将其托管在 kubernetes pod 中。

当我在 Rancher 中打开日志时,我可以看到这个警告:

 * Serving Flask app "app/preapproved_limits/api.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off

当我在本地机器上启动 flask 时,我也看到了。

但是我在我的本地机器上看不到而在 Rancher 中确实看到的是:

10.0.67.20 - - [02/Jul/2020 16:49:20] "GET /health HTTP/1.1" 200 -
INFO:werkzeug:10.0.67.20 - - [02/Jul/2020 16:49:20] "GET /health HTTP/1.1" 200 -

每 5 秒记录一次。 什么鬼?

但最重要和最烦人的是我看不到我用 Python 的 print() 功能制作的日志。

谁能解释一下:

/health是k8s需要的正常健康检查端点。

默认情况下,Flask 不会打印到标准输出,因为它会缓冲行以使 I/O 更有效率。您可以调用 sys.stdout.flush()print(flush=True),在您的 Dockerfile 中设置环境变量 PYTHONUNBUFFERED=1(可能是最简单的),或者像我们一样使用 logging 模块。

您可以阅读有关此环境变量的更多信息 here