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 错误报告发送报告。