【问题标题】:TypeError: logging.log is not a function JavaScript Google Cloud FuctionTypeError: logging.log 不是函数 JavaScript Google Cloud 函数
【发布时间】:2019-08-24 21:50:30
【问题描述】:

我已经搜索过,但没有找到关于这个问题的任何内容。

我已经部署了一些用 JavaScript 编写的 Google Cloud 函数,它们利用以下函数来报告错误。函数运行成功,但我收到以下错误:

TypeError: logging.log 不是函数 在 reportError (/user_code/index.js:158:23)

const logging = require('@google-cloud/logging');

报告错误函数:

function reportError(err, context = {}) {

  const logName = 'errors';
  const log = logging.log(logName);

  // https://cloud.google.com/logging/docs/api/ref_v2beta1/rest/v2beta1/MonitoredResource
  const metadata = {
    resource: {
      type: 'cloud_function',
      labels: {function_name: process.env.FUNCTION_NAME},
    },
  };

  // https://cloud.google.com/error-reporting/reference/rest/v1beta1/ErrorEvent
  const errorEvent = {
    message: err.stack,
    serviceContext: {
      service: process.env.FUNCTION_NAME,
      resourceType: 'cloud_function',
    },
    context: context,
  };

  // Write the error log entry
  return new Promise((resolve, reject) => {
    log.write(log.entry(metadata, errorEvent), (error) => {
      if (error) {
       return reject(error);
      }
      return resolve();
    });
  });
}
// [END reporterror]

【问题讨论】:

  • 对于初学者,您应该提供有关“日志记录”变量如何初始化的更多上下文。
  • 道歉 - 我已经更新了我上面的问题。

标签: javascript google-cloud-functions


【解决方案1】:

就目前而言,通过将“日志记录”变量的初始化更改为,将 YOUR_PROJECT_ID 替换为创建这些 Cloud Function 的项目 ID:

const logging = new (require('@googlecloud/logging')).Logging({projectId:'YOUR_PROJECT_ID'});

它应该可以工作。

您可以通过多种方式更改代码,但根据您在此处发布的内容将是新版本(只需相应地编辑 projectId 变量):

const google_cloud_logging = require('@google-cloud/logging');

function reportError(err, context = {}) {

  const logName = 'errors';

  const projectId = '';

  const logging = new google_cloud_logging.Logging({projectId: projectId});

  const log = logging.log(logName);

  // https://cloud.google.com/logging/docs/api/ref_v2beta1/rest/v2beta1/MonitoredResource
  const metadata = {
    resource: {
      type: 'cloud_function',
      labels: {function_name: process.env.FUNCTION_NAME},
    },
  };

  // https://cloud.google.com/error-reporting/reference/rest/v1beta1/ErrorEvent
  const errorEvent = {
    message: err.stack,
    serviceContext: {
      service: process.env.FUNCTION_NAME,
      resourceType: 'cloud_function',
    },
    context: context,
  };

  // Write the error log entry
  return new Promise((resolve, reject) => {
    log.write(log.entry(metadata, errorEvent), (error) => {
      if (error) {
       return reject(error);
      }
      return resolve();
    });
  });
}
// [END reporterror]

此更改基于following example

【讨论】:

  • 您的第一个建议给了我Error parsing triggers: Cannot find module '@googlecloud/logging',尽管我可以在依赖项下的package.json 文件中看到"@google-cloud/logging": "^0.7.1"。您的第二个建议已成功部署,但当它被触发时,我收到两个日志错误 1.(node:2) DeprecationWarning: grpc.load: Use the @grpc/proto-loader module with grpc.loadPackageDefinition instead,还有 2.TypeError: Cannot read property 'stack' of undefined at reportError...
  • 我相信你可以忽略“DeprecationWarning”。您也可以从这段代码“function f(a) {a.c;};f()”中得到错误。因此,您可能会在没有参数的情况下调用函数“reportError”。检查以下链接以获取有关该主题的更多教育:stackoverflow.com/questions/6550795/…
  • 我遇到了同样的错误,上面的第二个解决方案有效
猜你喜欢
  • 2021-06-05
  • 2019-04-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
相关资源
最近更新 更多