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 關注
- 152 瀏覽
添加回答
舉報