我正在用Go编写Google Cloud Function。我可以简单地通过写到stdout来写日志消息。生成的日志包括有关函数,其运行时,跟踪信息等的信息。非常棒,但是,我想向日志中添加一些结构化数据,这意味着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,
})
但是,我看到的云控制台日志丢失了所有自动附加到标准输出日志的好信息。
为了找回一部分,我可以在设置记录器时添加此选项:
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"}`)