如何在NodeJS中使用google/logging包传递原始负载联合标签?
到目前为止,我能够在日志中编写textPayload和jsonPayload。
尝试使用google和protobufjs创建协议缓冲区,甚至尝试过协议缓冲包,但是当我执行log.entry和log.write时,日志中看不到有效负载。
这是编写日志的代码。
//writelogs.j
function writeLogEntryAdvanced (logName, options, callback) {
var logging = Logging();
var log = logging.log(logName);
var protobuf = require('protocol-buffers');
var fs = require('file-system');
// pass a proto file as a buffer/string or pass a parsed protobuf-schema object
var messages = protobuf(fs.readFileSync('test.proto'));
var buf = messages.Test.encode({
num: 42,
payload: 'hello world'
});
console.log(buf);
var entry = log.entry({ resource: options.resource }, buf);
// See https://googlecloudplatform.github.io/google-cloud-node/#/docs/logging/latest/logging/log?method=write
log.write(entry, function (err, apiResponse) {
if (err) {
return callback(err);
}
console.log('Wrote entry to log: %s', logName);
return callback(null, apiResponse);
});
}//test.proto
message Test {
required float num = 1;
required string payload = 2;
}编写代码是从github的nodejs示例中复制的,而我自己对protopayload的修改很少。只为jsonPayload和textPayload编写示例日志。
发布于 2018-01-29 03:44:24
不允许为日志API中的protoPayload字段使用任意协议缓冲区。只有少数几个具有著名描述符的Google平台服务被允许在这一领域使用。
对于任意的结构化日志记录,您应该使用jsonPayload字段。
有关这些字段的更多信息记录在:https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry中。
发布于 2018-01-26 19:43:13
为了完整起见,我张贴我最后的评论作为回答。
使用堆栈驱动程序日志查看器时,请确保正在查看写入日志的正确的“logName”和“resource.type”。
还请确保您的“test.proto”遵循Google协议缓冲语言指南。如果您正在查看日志,但没有看到有效负载,则此问题很可能是由于编码器造成的。您可以尝试使用google-protobuf作为“协议缓冲区”的替代方案。
https://stackoverflow.com/questions/43539160
复制相似问题