如何使用@google-cloud/logging 发送带有文本消息和 JSON 负载的单个日志条目?
How to send a single log entry with a text message and a JSON payload using @google-cloud/logging?
按照此 tutorial 和其他一些文档,我有这段代码,就将日志发送到我的项目的 Cloud Logging 而言,它运行良好:
testLogging.ts
import { Logging } from "@google-cloud/logging";
const PROJECT_ID = "MY_PROJECT_ID";
const REGION = "MY_REGION";
const SERVICE_NAME = "MY_SERVICE_NAME";
const logging = new Logging({ projectId: PROJECT_ID });
const logName = "my-logs";
const log = logging.log(logName);
const resource = {
type: "cloud_run_revision", // I'M LOGGING FOR A CLOUD RUN CONTAINER
labels: {
service_name: SERVICE_NAME,
location: REGION,
project_id: PROJECT_ID,
revision_name: "",
configuration_name: ""
}
};
const text_msg = `MY ERROR MSG`;
const json_payload = { foo: "bar" };
const text_entry = log.entry(
{ resource, severity: "ERROR" },
text_msg
);
const json_entry = log.entry(
{ resource, severity: "ERROR" },
json_payload
);
log.write(text_entry);
log.write(json_entry);
他们正在工作。这正在记录中:
但到目前为止我只能单独记录它。我想发送一个带有文本消息和 JSON 负载的日志条目。我该怎么做?
参考文献:
- https://cloud.google.com/logging/docs/reference/libraries#windows
- https://github.com/googleapis/nodejs-logging/blob/master/samples/logs.js
- https://cloud.google.com/logging/docs/api/v2/resource-list#resource-types
- https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource
- https://googleapis.dev/nodejs/logging/latest/
测试后更新
这个版本是我测试过的并且可以正常工作,所以看看你是否可以根据你的需要调整它。
const {Logging} = require("@google-cloud/logging");
const PROJECT_ID = "PROJECT_ID";
const REGION = "REGION";
const SERVICE_NAME = "MY_SERVICE_NAME";
const KEYFILE_PATH = "keyfile.json";
const logging = new Logging({ projectId: PROJECT_ID, keyFile: KEYFILE_PATH, fallback: false });
const logName = "my-log";
const log = logging.log(logName);
const resource = {
type: "cloud_run_revision", // I'M LOGGING FOR A CLOUD RUN CONTAINER
labels: {
service_name: SERVICE_NAME,
location: REGION,
project_id: PROJECT_ID,
revision_name: "",
configuration_name: ""
}
};
const text_msg = `MY ERROR MSG`;
const json_payload = { foo: "bar" };
// The metadata associated with the entry
const metadata = {
resource,
severity: 'ERROR',
textPayload: text_msg,
jsonPayload: json_payload
};
// Prepares a log entry
const entry = log.entry(metadata);
async function writeLog() {
await log.write(entry);
console.log('Logged!');
}
writeLog();
这导致:
原版Post
entry()
函数接受multiple configurations, try dropping the second parameter and just passing it all in the metadata.
log.entry({
resource,
severity: "ERROR",
jsonPayload: json_payload,
textPayload: text_payload
});
在@BrianBurton 和他的回答的帮助下,我找到了一种方法:
从 LogEntry reference doc,我们看到有效载荷必须是 以下之一: protoPayload
、textPayload
或 jsonPayload
.
但我刚刚发现,如果您将 message
字段添加到 jsonPayload
对象,它将显示为错误或日志消息。
例如:
const json_payload = { message: "SOMETHING HAPPENED", foo: "bar" };
const json_entry = log.entry(
{ resource,
severity: "ERROR",
},
json_payload
);
log.write(json_entry);
结果:
按照此 tutorial 和其他一些文档,我有这段代码,就将日志发送到我的项目的 Cloud Logging 而言,它运行良好:
testLogging.ts
import { Logging } from "@google-cloud/logging";
const PROJECT_ID = "MY_PROJECT_ID";
const REGION = "MY_REGION";
const SERVICE_NAME = "MY_SERVICE_NAME";
const logging = new Logging({ projectId: PROJECT_ID });
const logName = "my-logs";
const log = logging.log(logName);
const resource = {
type: "cloud_run_revision", // I'M LOGGING FOR A CLOUD RUN CONTAINER
labels: {
service_name: SERVICE_NAME,
location: REGION,
project_id: PROJECT_ID,
revision_name: "",
configuration_name: ""
}
};
const text_msg = `MY ERROR MSG`;
const json_payload = { foo: "bar" };
const text_entry = log.entry(
{ resource, severity: "ERROR" },
text_msg
);
const json_entry = log.entry(
{ resource, severity: "ERROR" },
json_payload
);
log.write(text_entry);
log.write(json_entry);
他们正在工作。这正在记录中:
但到目前为止我只能单独记录它。我想发送一个带有文本消息和 JSON 负载的日志条目。我该怎么做?
参考文献:
- https://cloud.google.com/logging/docs/reference/libraries#windows
- https://github.com/googleapis/nodejs-logging/blob/master/samples/logs.js
- https://cloud.google.com/logging/docs/api/v2/resource-list#resource-types
- https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource
- https://googleapis.dev/nodejs/logging/latest/
测试后更新
这个版本是我测试过的并且可以正常工作,所以看看你是否可以根据你的需要调整它。
const {Logging} = require("@google-cloud/logging");
const PROJECT_ID = "PROJECT_ID";
const REGION = "REGION";
const SERVICE_NAME = "MY_SERVICE_NAME";
const KEYFILE_PATH = "keyfile.json";
const logging = new Logging({ projectId: PROJECT_ID, keyFile: KEYFILE_PATH, fallback: false });
const logName = "my-log";
const log = logging.log(logName);
const resource = {
type: "cloud_run_revision", // I'M LOGGING FOR A CLOUD RUN CONTAINER
labels: {
service_name: SERVICE_NAME,
location: REGION,
project_id: PROJECT_ID,
revision_name: "",
configuration_name: ""
}
};
const text_msg = `MY ERROR MSG`;
const json_payload = { foo: "bar" };
// The metadata associated with the entry
const metadata = {
resource,
severity: 'ERROR',
textPayload: text_msg,
jsonPayload: json_payload
};
// Prepares a log entry
const entry = log.entry(metadata);
async function writeLog() {
await log.write(entry);
console.log('Logged!');
}
writeLog();
这导致:
原版Post
entry()
函数接受multiple configurations, try dropping the second parameter and just passing it all in the metadata.
log.entry({
resource,
severity: "ERROR",
jsonPayload: json_payload,
textPayload: text_payload
});
在@BrianBurton 和他的回答的帮助下,我找到了一种方法:
从 LogEntry reference doc,我们看到有效载荷必须是 以下之一: protoPayload
、textPayload
或 jsonPayload
.
但我刚刚发现,如果您将 message
字段添加到 jsonPayload
对象,它将显示为错误或日志消息。
例如:
const json_payload = { message: "SOMETHING HAPPENED", foo: "bar" };
const json_entry = log.entry(
{ resource,
severity: "ERROR",
},
json_payload
);
log.write(json_entry);
结果: