使用云日志记录写入日志

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写日志的参考。