how*_*wie 3 google-app-engine go google-cloud-platform
我为 GAE 找到了两种 Go 库?
我应该使用哪一种?顺便说一下,我在我的应用程序中同时使用了两个日志库。在本地开发模式下,我可以看到这样的日志。
2019/01/08 06:57:34 INFO: Search keyword="test" idOnly=bool
2019/01/08 06:57:34 INFO: Search:"test"
Run Code Online (Sandbox Code Playgroud)
但是当我部署到生产 GAE 时,我看不到任何日志。
无论使用 stackdriver
resource.type="gae_app" resource.labels.module_id="default"
Run Code Online (Sandbox Code Playgroud)
或者 gcloud 命令
gcloud app logs tail -s default
Run Code Online (Sandbox Code Playgroud)
如果您希望日志出现在 Stackdriver Logging 中,正确的方法是使用“google.golang.org/appengine/log”包。
但是,根据Go1.11 运行时的文档,建议不要使用 App Engine 特定的 API 并使用 Google Cloud 客户端库。
关于日志记录,这意味着不使用“google.golang.org/appengine/log”,推荐的方法是使用“log”包。一个例子:
应用程序.yaml
runtime: go111
Run Code Online (Sandbox Code Playgroud)
你好去
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!")
}
Run Code Online (Sandbox Code Playgroud)
此日志将出现在 Stackdriver Logging 中:
resource.type="gae_app"
resource.labels.module_id="default"
logName="projects/<YOUR_PROJECT_NAME>/logs/stderr"
Run Code Online (Sandbox Code Playgroud)
或者通过stderr在日志过滤器下拉列表中选择。
但是,如果您愿意,您仍然可以使用“google.golang.org/appengine/log”包,但您还必须添加“google.golang.org/appengine”包,并appengine.Main()在main()功能。