使用 Go 記錄應用程式事件

這部分 Bookshelf 教學課程說明應用程式如何利用詳細的記錄功能來協助偵測、偵錯及監控潛在問題。記錄應用程式事件有助您在開發期間和應用程式正式推出後辨識及解決問題。

本頁面是多頁教學課程的一部分。如要從頭開始並閱讀設定操作說明,請前往 Go Bookshelf 應用程式頁面。

輸入下列指令,前往包含程式碼範例的目錄:

Linux/macOS

cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/getting-started/bookshelf

Windows

cd %GOPATH%\src\github.com\GoogleCloudPlatform\golang-samples\getting-started\bookshelf

在本機電腦執行應用程式

  1. 執行應用程式以啟動本機網路伺服器:

    cd app
    go run app.go auth.go template.go
    
  2. 在網路瀏覽器中輸入此位址:

    http://localhost:8080

按下 Control+C 即可離開本機網路伺服器。

將應用程式部署至 App Engine 彈性環境

  1. app 目錄中,輸入下列指令以部署範例:

    gcloud app deploy
    
  2. 在網路瀏覽器中,輸入下列網址。將 [YOUR_PROJECT_ID] 替換為您的專案 ID:

    https://[YOUR_PROJECT_ID].appspot.com
    

如果您更新應用程式,可輸入與第一次部署應用程式時使用的相同指令部署更新版本。新部署會為您的應用程式建立新版本,並會將它升級為預設版本。 應用程式的較舊版本會保留下來,相關聯的 VM 執行個體也會保留下來。請注意,這些應用程式版本和 VM 執行個體全部都是計費資源。

您可以刪除應用程式的非預設版本來降低費用。

若要刪除應用程式版本:

  1. 前往 GCP 主控台的「App Engine Versions」(App Engine 版本) 頁面。

    前往版本頁面

  2. 找到您要刪除的非預設應用程式版本,然後點選旁邊的核取方塊。
  3. 按一下頁面頂部的 [刪除] 按鈕, 刪除應用程式版本。

如需有關清除計費資源的完整資訊,請參閱本教學課程最後一個步驟的清除一節。

瞭解程式碼

在部署及執行應用程式後,請務必瞭解應用程式的運作情況。Cloud Platform 提供內建於 GCP 主控台的記錄與監控工具,您可以利用強大的功能快速查看應用程式內的詳細活動,進而找出重大問題或趨勢所在。

Bookshelf 範例應用程式會使用 Go 的標準 log 套件記錄錯誤,同時會使用 Gorilla Web Toolkit 的 CombinedLoggingHandler 記錄要求。下列程式碼範例示範 HTTP 要求、HTTP 要求錯誤與應用程式事件的記錄。

處理 HTTP 要求時記錄錯誤

下列程式碼設定在應用程式內發生的重要錯誤記錄。應用程式中的每個處理常式都是 appHandler,該處理常式會傳回 appError。如果處理常式傳回非 nil appError,系統會向使用者顯示一則訊息,並會將錯誤詳細資料與訊息記錄下來:

type appHandler func(http.ResponseWriter, *http.Request) *appError

type appError struct {
	Error   error
	Message string
	Code    int
}

func (fn appHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	if e := fn(w, r); e != nil { // e is *appError, not os.Error.
		log.Printf("Handler error: status code: %d, message: %s, underlying err: %#v",
			e.Code, e.Message, e.Error)

		http.Error(w, e.Message, e.Code)
	}
}

記錄 HTTP 要求

使用 Gorilla Web Toolkit 的 CombinedLoggingHandler 記錄每項 HTTP 要求。下列程式碼中的 r 是 Gorilla mux.Router 用於轉送所有應用程式的要求處理常式。 CombinedLoggingHandler 會納入每項要記錄至 os.Stderr 的要求,之後才送出該項要求。

// Delegate all of the HTTP routing and serving to the gorilla/mux router.
// Log all requests using the standard Apache format.
http.Handle("/", handlers.CombinedLoggingHandler(os.Stderr, r))

記錄應用程式事件

應用程式沒有任何一般記錄陳述式或偵錯記錄陳述式,但您可以使用標準 log 套件新增這些陳述式:

log.Printf("Something happened: %v", x)

瞭解記錄設定

在 App Engine 彈性環境中執行

範例應用程式在 App Engine 彈性環境中執行時,Google Cloud Logging 會自動收集記錄至 stderrstdout 的一切,並會透過 GCP 主控台中的記錄檢視器提供查看、搜尋及匯出等功能。

查看記錄

在部署及執行範例應用程式後,系統將開始收集記錄資料。您可以使用 GCP 主控台內建的記錄監控工具分析這項記錄資料。下圖顯示 GCP 主控台中的記錄事件。

在主控台中記錄

如果您需要更詳細的分析,可將應用程式的記錄串流或匯入到 BigQuery 中,或將這些記錄匯出至 Google Cloud Storage 值區。您可以直接在 GCP 主控台執行這兩項操作。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁