作为迁移到 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-protos
和 protobuf
。然后我可以使用以下方法反序列化 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/