我找到了两种 GAE 的 go 库:
- “google.golang.org/appengine/log”
- “cloud.google.com/go/logging”
我应该使用哪一个? 顺便说一下,我在我的应用程序中同时使用了两个日志记录库。 在本地开发模式下,我可以看到这样的日志。
2019/01/08 06:57:34 INFO: Search keyword="test" idOnly=bool
2019/01/08 06:57:34 INFO: Search:"test"
但是当我部署到生产 GAE 时,我看不到任何日志。
不管用stackdriver by
resource.type="gae_app" resource.labels.module_id="default"
或者gcloud命令
gcloud app logs tail -s default
最佳答案
如果您希望日志显示在 Stackdriver Logging 中,正确的方法是使用 "google.golang.org/appengine/log" package .
但是,根据 documentation on the Go1.11 runtime ,推荐not to use the App Engine specific API's and use the Google Cloud client library .
关于日志记录,这意味着不使用“google.golang.org/appengine/log”,推荐的方法是使用 "log" package反而。一个例子:
app.yaml
runtime: go111
你好.go
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()
函数中的入口点。
关于google-app-engine - 我应该为 GAE 中的 Go 使用哪个日志记录库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087067/