python - 如何从 StackDriver Logging API 反序列化 App Engine 应用程序日志?

标签 python python-3.x google-app-engine google-cloud-platform google-cloud-logging

作为迁移到 Python 3 的一部分,我需要从 logservice 迁移到StackDriver Logging API 。我有google-cloud-logging安装后,我可以使用以下命令成功获取 GAE 应用程序日志:

>>> from google.cloud.logging_v2 import LoggingServiceV2Client
>>> entries = LoggingServiceV2Client().list_log_entries(('projects/projectname',),
         filter_='resource.type="gae_app" AND protoPayload.@type="type.googleapis.com/google.appengine.logging.v1.RequestLog"')
>>> print(next(iter(entries)))
proto_payload {
  type_url: "type.googleapis.com/google.appengine.logging.v1.RequestLog"
  value: "\n\ts~brid-gy\022\0018\032R5d..."
}

这会为我提供一个 LogEntry,其中 proto_payload.value 字段中包含文本应用程序日志。我如何反序列化该字段?我在文档中发现了很多相关的提及,但没有任何内容指出我可以在任何地方使用 google.appengine.logging.v1.RequestLog protobuf 生成的类(如果这是正确的想法的话)。有人做过吗?

最佳答案

哇!终于让这个工作了。我必须自己手动生成并使用 google.appengine.logging.v1.RequestLog Protocol Buffer 的 Python 绑定(bind)。方法如下。

首先,我在头部克隆了这两个存储库:

然后,我通过运行以下命令从 request_log.proto 生成 request_log_pb2.py:

protoc -I googleapis/ -I protobuf/src/ --python_out . googleapis/google/appengine/logging/v1/request_log.proto

最后,我通过 pip 安装了 googleapis-common-protosprotobuf。然后我可以使用以下方法反序列化 proto_payload:

from google.cloud.logging_v2 import LoggingServiceV2Client
client = LoggingServiceV2Client(...)
log = next(iter(client.list_log_entries(('projects/brid-gy',),
   filter_='logName="projects/brid-gy/logs/appengine.googleapis.com%2Frequest_log"')))

import request_log_pb2
pb = request_log_pb2.RequestLog.FromString(log.proto_payload.value)
print(pb)

关于python - 如何从 StackDriver Logging API 反序列化 App Engine 应用程序日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58753378/

相关文章:

javascript - Ajax 调用 Python 脚本。我缺少什么?

python-3.x - 删除最小 numpy 数组的 p%

node.js - 部署到 App Engine 会产生 gulp 错误?

java - 如何在 Java 服务器页面中使用 Cache-Control 和 Expires header

python - 计算 Pandas 中分组数据的权重

python - redis/stdnet 数据模型回溯

python - 使用 Python 3 从 PDF 解析中提取标题和子标题

python - 在python中找到两个列表之间匹配索引的最快方法?

python - 如何从另一个线程向 gui 发送标签 - PyQt

java - 将动态 URL 路由到 App Engine Java 中的静态文件