2 回答
TA贡献1906条经验 获得超10个赞
如果您希望日志出现在 Stackdriver Logging 中,正确的方法是使用“google.golang.org/appengine/log”包。
但是,根据Go1.11 运行时的文档,建议不要使用 App Engine 特定的 API 并使用 Google Cloud 客户端库。
关于日志记录,这意味着不使用“google.golang.org/appengine/log”,推荐的方法是使用“log”包。一个例子:
应用程序.yaml
runtime: go111
你好去
package main
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", indexHandler)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
//Create the log and write it
log.Printf("Hello world!")
fmt.Fprint(w, "Log written in Stackdriver!")
}
此日志将显示在 Stackdriver Logging 中的以下位置:
resource.type="gae_app"
resource.labels.module_id="default"
logName="projects/<YOUR_PROJECT_NAME>/logs/stderr"
stderr或者通过在日志过滤器下拉列表中选择。
但是,如果您愿意,您仍然可以使用“google.golang.org/appengine/log”包,但您还必须添加“google.golang.org/appengine”包,并将入口点添加appengine.Main()到main()功能。
TA贡献2012条经验 获得超12个赞
您也可以采用结构化日志记录路线,您不依赖于上述客户端库。
// Entry defines a log entry.
type Entry struct {
Message string `json:"message"`
Severity string `json:"severity,omitempty"`
Trace string `json:"logging.googleapis.com/trace,omitempty"`
// Cloud Log Viewer allows filtering and display of this as `jsonPayload.component`.
Component string `json:"component,omitempty"`
}
// String renders an entry structure to the JSON format expected by Cloud Logging.
func (e Entry) String() string {
if e.Severity == "" {
e.Severity = "INFO"
}
out, err := json.Marshal(e)
if err != nil {
log.Printf("json.Marshal: %v", err)
}
return string(out)
}
然后使用内置log包登录:
log.Println(Entry{
Severity: "NOTICE",
Message: "This is the default display field.",
Component: "arbitrary-property",
Trace: trace,
})
- 2 回答
- 0 关注
- 111 浏览
添加回答
举报