TL;博士;
有谁知道是否可以使用console.log
在 Firebase/Google Cloud 函数中使用 jsonPayload
将条目记录到 Stack Driver属性,所以我的日志是可搜索的(目前我传递给 console.log 的任何内容都被字符串化为 textPayload
)。
我有一个多模块项目,其中一些代码在 Firebase Cloud Functions 上运行,还有一些在其他环境(如 Google Compute Engine)中运行。稍微简化一下,我基本上有一个“核心”模块,然后我将“云功能”模块部署到云功能,将“后端服务”部署到 GCE,这些都依赖于“核心”等。
我在整个“核心”模块中使用 bunyan 进行日志记录,当部署到 GCE 时,记录器是使用“@google-cloud/logging-bunyan”配置的,因此我的日志会转到 Stack Driver。
另外:在 Google Cloud Functions 中使用此配置会导致 Error: Endpoint read failed
出现问题我认为这是由于功能不会变冷并试图重用死连接,但我不能 100% 确定真正的原因是什么。
所以现在我正在尝试使用 console.log(arg)
登录在哪里 arg
是一个对象,而不是一个字符串。我希望这个对象出现在 jsonPayload
下的堆栈驱动程序中但它正在被字符串化并放入 textPayload
field 。
最佳答案
我花了一段时间,但我终于遇到了this example在 firebase functions samples repository .最后我决定了一些像这样的东西:
const Logging = require('@google-cloud/logging');
const logging = new Logging();
const log = logging.log('my-func-logger');
const logMetadata = {
resource: {
type: 'cloud_function',
labels: {
function_name: process.env.FUNCTION_NAME ,
project: process.env.GCLOUD_PROJECT,
region: process.env.FUNCTION_REGION
},
},
};
const logData = { id: 1, score: 100 };
const entry = log.entry(logMetaData, logData);
log.write(entry)
您可以添加一个字符串
severity
属性值为 logMetaData
(例如“信息”或“错误”)。 Here is the list的可能值。可用节点 10 环境变量的更新。这些似乎可以解决问题:
labels: {
function_name: process.env.FUNCTION_TARGET,
project: process.env.GCP_PROJECT,
region: JSON.parse(process.env.FIREBASE_CONFIG).locationId
}
更新 : 对于 Node 10 运行时,他们希望您使用 set env values explicitly在部署期间。我想有一个宽限期,因为我部署的功能仍在工作。
关于firebase - 在 Firebase Cloud Functions 中记录 'jsonPayload',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185824/