Flask 日志未显示在 GCP 日志查看器中

时间:2021-02-22 20:35:46

标签: python flask google-cloud-platform gunicorn stackdriver

我开发了一个简单的 Flask Web 应用程序并将其部署到 GCP 计算引擎。使用 gunicorn 我可以运行该程序并且它可以工作。我按照本指南 https://cloud.google.com/logging/docs/setup/python 设置日志记录。

import google.cloud.logging
import logging

client = google.cloud.logging.Client()

client.setup_logging()

logging.info('PROGRAM STARTED') 

我的应用中的这段代码似乎可以正常工作。我在日志查看器中看到“程序已启动”日志。我的问题是我找不到来自烧瓶的任何日志,例如 http 请求或错误。我试图了解这是如何工作的,因为我对 GCP 和日志记录实践都不熟悉。任何提示或提示?提前致谢!

1 个答案:

答案 0 :(得分:1)

你是同时做这两件事吗?如果您想使用 python 的内置日志记录,那么只需

import logging

创建一个记录器,为其部署到的每个 Python 模块命名,使用

logger = logging.getLogger(__name__)

并使用它(最少)

logger.info('my log entry')

文档中有很多关于此的配置、过滤等。 我无法评论 Google 记录器,但他们确实说使用它或常规的 Python 记录器。

以下是如何捕获所有或(更可能是选择)flask 的 http 交互(尽管可能比您需要的更复杂)的示例:

@app.before_request
def log_request_info():
    if current_user.is_authenticated:
        if not current_user.is_superuser and \
                not any([(term in str(request)) for term in ['static', 'favicon', 'images']]):
            app.logger.info('%s, %s' % (
                str(current_user), request.url[len(request.url_root):][:50]))
    else:
        if not any([(term in str(request)) for term in ['api', 'static', 'favicon']]):
            app.logger.info('unauthorised: %s' % (request.url[len(request.url_root):]))

注意:还有一个更强大的替代方法:记录器构造的过滤选项。