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

Flask logs not showing up in GCP log viewer

我开发了一个简单的 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 和日志记录实践都不熟悉。任何提示或提示?提前致谢!

你是同时做这两项吗?如果你想使用 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):]))

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