python - Flask 日志未显示在 GCP 日志查看器中
问题描述
我开发了一个简单的烧瓶网络应用程序并将其部署到 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):]))
注意:有一个更强大的替代方案:记录器构造的过滤选项。
推荐阅读
- java - 由于 AJP 未能与后端建立连接,连接被拒绝
- performance - libsvm compiled with AVX vs no AVX
- javascript - 如何获取元素的完整 CSS(类、内联、@import、@media)
- c# - 创建系统类型的自定义方法
- javascript - Express async/await 错误处理程序中的动态响应状态
- azure-cosmosdb - 麻烦同时获取过滤的顶点和未过滤的顶点计数
- javascript - MouseEvent 上的 Object.keys 未列出其所有属性
- android - 从 Facebook/Instagram 链接时,Angular 7 网站在 android WebView 上崩溃
- javascript - 如何使用 AJAX(不是 jQuery)从本地浏览器存储请求和输出 JSON
- sql-server - 如何使用 Group by 修复使用虚拟表的 SELECT