我想阅读BigQuery日志条目以进行一些分析。但是我似乎无法解码protoPayload.value
。我尝试弄乱google-proto-files
和protocol-buffers
包,但是我想我这里确实缺少一些明显的东西...
const Logging = require('@google-cloud/logging');
const protobuf = require('protocol-buffers');
const protoFiles = require('google-proto-files');
const protoPath = './node_modules/google-proto-files/google/cloud/audit/audit_log.proto';
const root = protoFiles.loadSync(protoPath)
const AuditLog = root.lookup('google.cloud.audit.AuditLog');
const client = new Logging.v2.LoggingServiceV2Client({ projectId });
client.listLogEntriesStream({resourceNames, filter, pageSize})
.on('data', entry => {
console.log(entry); // Entry is of type AuditLog
console.log(AuditLog.decode(entry.protoPayload.value.buffer));
process.exit(1)
})
.on('error', e => console.error(e))
.on('end', () => console.info('END RECEIVED', arguments))
我确实收到带有protoPayloads的消息,但是尝试解码消息时收到的错误是:
Error: no such Type or Enum 'google.rpc.Status' in Type .google.cloud.audit.AuditLog
实际的问题:解码
protoPayload
中的LogEntry
字段的正确方法是什么?谢谢!
最佳答案
由于entry.protoPayload.value
是序列化的原型(prototype)(AuditLog消息),因此您应该能够使用https://developers.google.com/protocol-buffers/docs/reference/javascript-generated#message中记录的deserializeBinary()方法来处理它,“protocol-buffers” npm似乎不是来自Google,并且原型(prototype)编译器会生成反序列化的代码。
我不希望您需要这样做,但是您也可以尝试显式加载“google/rpc/status.proto”定义。
关于node.js - 从Google Logging API解码protoPayload,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50935252/