【发布时间】:2022-01-21 18:11:22
【问题描述】:
我正在尝试按照 this 指南将一些自定义日志记录放入 firebase 函数中。函数本身正在运行,我可以看到传入的数据(它是一个 https 'callable' 函数)。但是,一旦它到达尝试实际写入该日志条目的行,我就会收到“错误:7 PERMISSION_DENIED”
由于 console.log() 调用写入云日志,我假设 firebase 函数可以访问 Cloud Logging。但也许它需要额外的许可?不过,我找不到任何关于应该在该页面上设置的位置的参考。
// Logging, logName, region, functions are provided by the surrounding app
const logging = new Logging()
const log = logging.log(logName)
const METADATA = {
resource: {
type: 'cloud_function',
labels: {
function_name: 'CustomLog',
region
}
}
};
exports = module.exports = functions.https.onCall(async data => {
const exVersion = 6
const exId = data.exId
console.log('***** exVersion:', exVersion, 'exId:', exId) // exId from caller
const entry = log.entry(METADATA, data.error) // data.error from caller
console.log('METADATA:', METADATA) // Shows in Logs Explorer
console.log('entry:', entry) // Shows in Logs Explorer
log.write(entry) // Results in Error: 7 PERMISSION_DENIED
return {
exVersion,
exId,
}
})
如果我使用 firebase function:shell 从 CLI 运行它,日志条目会正确创建,所以我非常确信代码是正确的。
【问题讨论】:
-
我在您的 sn-p 中看不到一些重要的东西:
const { Logging } = require('@google-cloud/logging');以及元数据结构中变量region的定义... -
见第 1 行的注释——它们都在那里,但在这个例子中没有上下文。代码在本地运行良好。
标签: firebase google-cloud-functions google-cloud-logging