go - 如何配置 cloud.google.com/go/logging 使其看起来像写入标准输出的日志?

标签 go logging google-cloud-functions google-cloud-stackdriver

我正在用 Go 编写 Google Cloud Function。我可以简单地通过写入标准输出来写入日志消息。生成的日志包括有关该函数、其运行时、跟踪信息等的信息。 super 好,但是,我想在日志中添加一些结构化数据,这意味着 stdout 不够灵活。所以我尝试使用“cloud.google.com/go/logging”。我是这样设置的:

// Set up like this
logClient, err = logging.NewClient(ctx, "my-project-id")
if err != nil {
    return
}
logger := logClient.Logger("my-function-name")

// And log like this
logger.Log(logging.Entry{
    Payload:  "Hello World!",
    Severity: logging.Info,
})

但是,我在 Cloud Console 中看到的日志缺少自动附加到标准输出日志的所有有用信息。

要取回其中一些,我可以在设置记录器时添加此选项:

logging.CommonResource(&monitoredres.MonitoredResource{
    Type: fmt.Sprintf("projects/%s/logs/cloudfunctions.googleapis.com%scloud-functions", os.Getenv("GCP_PROJECT"), "%2F"),
    Labels: map[string]string{
        "function_name": os.Getenv("FUNCTION_NAME"),
        "project_id":    os.Getenv("GCP_PROJECT"),
        "region":        os.Getenv("FUNCTION_REGION"),
    },
})

这样,当我在 Cloud Console 的云功能列表中点击“查看日志”按钮时,就可以看到日志。但是,它缺少函数执行 id 和跟踪 id。

我是否在这里遗漏了一些明显的东西,或者为 Google Cloud 服务设置像样的日志记录是否过于复杂?任何帮助表示赞赏。

最佳答案

诀窍是简单地将 json 字符串写入 stdout。

fmt.Println(`{"field_name": "Hello World!"}`)

日志的架构可以是 found here .

例如像这样设置严重性:

fmt.Println(`{"field_name": "Hello World!", "severity": "DEBUG"}`)

关于go - 如何配置 cloud.google.com/go/logging 使其看起来像写入标准输出的日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62143067/

相关文章:

arrays - 将字符串、整数和数组的 JSON 对象解码到映射中

java - 从 Dropwizard 应用程序日志中删除 hibernate 日志记录

火警警告 : Invalid query string segment - Warning when deploying simple Firebase Cloud function

image - Go base64图像解码

api - 内部带有变量的字符串,可以动态改变

go - 结果到达时如何管理缓存服务器上的重复请求

logging - 为什么 "log and throw"被视为反模式?

spring - Spring项目中如何添加 Sentry 监控

javascript - 如何在 Javascript 中创建全局变量的新实例

Firebase 函数版本 "Deploy to multiple environments"