首页 文章

在Firebase Cloud 功能中记录'jsonPayload'

提问于
浏览
2

TL; DR;

有谁知道是否可以在Firebase / Google Cloud功能中使用 console.log 使用 jsonPayload 属性将条目记录到堆栈驱动程序,以便我的日志可搜索(目前我传递给console.log的任何内容都会被字符串化为 textPayload ) .


我有一个多模块项目,其中一些代码在Firebase Cloud 功能上运行,还有一些在其他环境中运行,如Google Compute Engine . 稍微简化一下,我基本上有一个“核心”模块,然后我将“ Cloud 功能”模块部署到 Cloud 功能,“后端服务”部署到GCE,这些都依赖于“核心”等 .

我在整个“核心”模块中使用bunyan进行日志记录,当部署到GCE时,使用“@ google-cloud / logging-bunyan”配置 Logger ,以便我的日志转到堆栈驱动程序 .

除此之外:在Google Cloud Functions中使用此配置会导致 Error: Endpoint read failed 出现问题,我认为这是由于功能不会冷却并尝试重用死连接,但我不能100%确定真正的原因是什么 .

所以现在我正在尝试使用 console.log(arg) 进行日志,其中 arg 是一个对象,而不是一个字符串 . 我希望这个对象出现在 jsonPayload 下的堆栈驱动程序中,但它被字符串化并放入 textPayload 字段 .

1 回答

  • 6

    我花了一段时间,但我终于在firebase functions samples repository遇到了this example . 最后我决定采取类似这样的事情:

    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 (例如"INFO"或"ERROR") . Here is the list可能的值 .

相关问题