溫馨提示×

Golang日志中如何追蹤請求

小樊
39
2025-06-05 00:20:42
欄目: 編程語言

在Golang中,我們可以使用context包和第三方日志庫(如logruszap)來實現請求追蹤。下面是一個簡單的示例,展示了如何在Golang中使用contextlogrus實現請求追蹤。

首先,確保已經安裝了logrus庫:

go get github.com/sirupsen/logrus

然后,創建一個簡單的HTTP服務器,使用context傳遞請求ID,并在日志中記錄請求ID:

package main

import (
	"context"
	"fmt"
	"net/http"
	"time"

	"github.com/sirupsen/logrus"
)

const requestIDKey = "requestID"

func main() {
	logrus.SetFormatter(&logrus.JSONFormatter{})
	logrus.SetReportCaller(true)

	http.HandleFunc("/", handleRequest)
	logrus.Info("Server started on port 8080")
	http.ListenAndServe(":8080", nil)
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
	requestID := generateRequestID()
	ctx := context.WithValue(r.Context(), requestIDKey, requestID)
	logrus.WithFields(logrus.Fields{
		"requestID": requestID,
	}).Info("Handling request")

	start := time.Now()
	defer func() {
		logrus.WithFields(logrus.Fields{
			"requestID": requestID,
			"duration":  time.Since(start),
		}).Info("Finished handling request")
	}()

	// 模擬處理請求
	time.Sleep(100 * time.Millisecond)
	fmt.Fprintln(w, "Hello, World!")
}

func generateRequestID() string {
	return fmt.Sprintf("%d", time.Now().UnixNano())
}

在這個示例中,我們為每個請求生成一個唯一的請求ID,并將其存儲在context中。然后,我們在處理請求的開始和結束時記錄日志,包括請求ID和處理持續時間。

要查看請求追蹤日志,可以運行此程序并訪問http://localhost:8080。日志將顯示每個請求的ID和處理時間。

這只是一個簡單的示例,實際應用中可能需要更復雜的追蹤功能,例如分布式追蹤。在這種情況下,可以考慮使用像jaeger-client-go這樣的庫來實現更高級的追蹤功能。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女