使用云日志记录写入日志
Writing logs with cloud logging
我在使用 google-cloud/logging 时遇到问题。我的 objective 是写入一个每周创建的文件,我以前已经设法做到了。但是从昨天开始我一直收到这个错误:
Error: 3 INVALID_ARGUMENT: A monitored resource must be specified for each log entry.
所以我在阅读了有关未自动设置受监视资源的类似问题后,将 google-cloud/logging 更新为最新版本 (5.2.2)。确实解决了该错误,但是在该更改之后日志没有显示在日志查看器中。
我的记录器实用程序代码如下
const { Logging } = require('@google-cloud/logging');
exports.LoggingUtil = class LoggingUtil {
constructor(context){
var LogMetadata = {
severity: "INFO",
type: "gce_instance",
labels: {
function_name: process.env.FUNCTION_NAME,
project: process.env.GCLOUD_PROJECT,
region: process.env.FUNCTION_REGION
}
}
this.metadata = {
LogMetadata,
labels: {
execution_id: `${context.eventId}`
}
}
const logging = new Logging();
this.log = logging.log(this.getWeekStamp());
}
getWeekStamp(){
const environmentName = constants.environment.name;
var d = new Date();
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6:1);
date = new Date(d.setDate(diff)).toLocaleDateString('en-US', { day: '2-digit', month: 'short', year: 'numeric'});
date = date.replace(" ", "-");
return `${date.replace(", ","-")}-week-${environmentName}`;
}
write(text){
var entry = this.log.entry(this.metadata, text);
this.log.write(entry);
}
}
我做错了什么?感谢任何帮助
我认为你的错误与获取元数据变量的方式有关,因为它创建了一个日志查看器无法读取的格式错误的对象。
在您的方法构造函数中,您正在创建一个与此类似的元数据对象:
{ "LogMetadata":{
"severity":"INFO",
"type":"gce_instance",
"labels":{
"function_name":process.env.FUNCTION_NAME,
"project":process.env.GCLOUD_PROJECT,
"region":process.env.FUNCTION_REGION
}
},
"labels":{
"execution_id":`${context.eventId}`
}}
这不是有效的 MonitoredResource, you can change your code in order to create a valid MonitoredResource 例如
var LogMetadata = {
severity: "INFO",
type: "gce_instance",
labels: {
function_name: process.env.FUNCTION_NAME,
project: process.env.GCLOUD_PROJECT,
region: process.env.FUNCTION_REGION
}
}
this.metadata = LogMetadata
this.metadata.labels["execution_id"] = `${context.eventId}`
示例结果对象
{"severity":"INFO",
"type":"gce_instance",
"labels":{"function_name":process.env.FUNCTION_NAME,
"project":process.env.GCLOUD_PROJECT,
"region": process.env.FUNCTION_REGION,
"execution_id":`${context.eventId}`}
}
此外,你可以查看这个example file作为使用nodeJS写日志的参考。
我在使用 google-cloud/logging 时遇到问题。我的 objective 是写入一个每周创建的文件,我以前已经设法做到了。但是从昨天开始我一直收到这个错误:
Error: 3 INVALID_ARGUMENT: A monitored resource must be specified for each log entry.
所以我在阅读了有关未自动设置受监视资源的类似问题后,将 google-cloud/logging 更新为最新版本 (5.2.2)。确实解决了该错误,但是在该更改之后日志没有显示在日志查看器中。 我的记录器实用程序代码如下
const { Logging } = require('@google-cloud/logging');
exports.LoggingUtil = class LoggingUtil {
constructor(context){
var LogMetadata = {
severity: "INFO",
type: "gce_instance",
labels: {
function_name: process.env.FUNCTION_NAME,
project: process.env.GCLOUD_PROJECT,
region: process.env.FUNCTION_REGION
}
}
this.metadata = {
LogMetadata,
labels: {
execution_id: `${context.eventId}`
}
}
const logging = new Logging();
this.log = logging.log(this.getWeekStamp());
}
getWeekStamp(){
const environmentName = constants.environment.name;
var d = new Date();
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6:1);
date = new Date(d.setDate(diff)).toLocaleDateString('en-US', { day: '2-digit', month: 'short', year: 'numeric'});
date = date.replace(" ", "-");
return `${date.replace(", ","-")}-week-${environmentName}`;
}
write(text){
var entry = this.log.entry(this.metadata, text);
this.log.write(entry);
}
}
我做错了什么?感谢任何帮助
我认为你的错误与获取元数据变量的方式有关,因为它创建了一个日志查看器无法读取的格式错误的对象。
在您的方法构造函数中,您正在创建一个与此类似的元数据对象:
{ "LogMetadata":{
"severity":"INFO",
"type":"gce_instance",
"labels":{
"function_name":process.env.FUNCTION_NAME,
"project":process.env.GCLOUD_PROJECT,
"region":process.env.FUNCTION_REGION
}
},
"labels":{
"execution_id":`${context.eventId}`
}}
这不是有效的 MonitoredResource, you can change your code in order to create a valid MonitoredResource 例如
var LogMetadata = {
severity: "INFO",
type: "gce_instance",
labels: {
function_name: process.env.FUNCTION_NAME,
project: process.env.GCLOUD_PROJECT,
region: process.env.FUNCTION_REGION
}
}
this.metadata = LogMetadata
this.metadata.labels["execution_id"] = `${context.eventId}`
示例结果对象
{"severity":"INFO",
"type":"gce_instance",
"labels":{"function_name":process.env.FUNCTION_NAME,
"project":process.env.GCLOUD_PROJECT,
"region": process.env.FUNCTION_REGION,
"execution_id":`${context.eventId}`}
}
此外,你可以查看这个example file作为使用nodeJS写日志的参考。