网站搜索

typescript - 无法将错误从 Cloud Function 报告到 Stackdriver 错误报告


我尝试了这种方法(手动报告错误),但这在 Firebase 云函数中不起作用。

https://firebase.google.com/docs/functions/reporting-errors?hl=zh-cn

我尝试在本地环境中调用这个函数,结果它可以正常工作。我尝试在 Firebase 云函数中调用这个函数,但它不起作用。

这是我部署的函数。

exports.hello = https.onRequest((_, response) => {
  const error = new Error('ERROR!!!!')
  return reportError(error)
    .then(result => {
      response.json(result); // {}
    })
    .catch(err => {
      console.error(err); // No error
    });
})

// https://firebase.google.com/docs/functions/reporting-errors?hl=en#sending_to_stackdriver
function reportError(err, context = {}) {
  // This is the name of the StackDriver log stream that will receive the log
  // entry. This name can be any valid log stream name, but must contain "err"
  // in order for the error to be picked up by StackDriver Error Reporting.
  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();
    });
  });
}

function reportError 位于这里: https://firebase.google.com/docs/functions/reporting-errors?hl=en#sending_to_stackdriver

这是我使用的 package.json。

{
  "dependencies": {
    "firebase-admin": "^7.3.0",
    "firebase-functions": "^2.3.0"
  },
  "devDependencies": {
    "firebase-tools": "6.8.0"
  }
}

reportError 函数应向 Stackdriver 错误报告发送报告。