温馨提示×

如何用Golang日志追踪请求流程

小樊
32
2025-12-03 10:59:58
栏目: 编程语言

在Golang中,可以使用第三方库来实现日志追踪请求流程。一个常用的库是logrus,它提供了丰富的日志功能,包括结构化日志、日志级别、钩子等。下面是一个使用logrus实现日志追踪请求流程的示例:

  1. 首先,安装logrus库:
go get github.com/sirupsen/logrus
  1. 创建一个main.go文件,并引入logrus库:
package main

import (
	"github.com/sirupsen/logrus"
	"net/http"
	"time"
)

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

	http.HandleFunc("/", handleRequest)
	logrus.Info("Server started on port 8080")
	logrus.Fatal(http.ListenAndServe(":8080", nil))
}
  1. 创建一个handleRequest函数,用于处理HTTP请求:
func handleRequest(w http.ResponseWriter, r *http.Request) {
	start := time.Now()

	logrus.WithFields(logrus.Fields{
		"method": r.Method,
		"url":    r.URL.String(),
	}).Info("Request received")

	// 模拟处理请求
	time.Sleep(100 * time.Millisecond)

	duration := time.Since(start)
	logrus.WithFields(logrus.Fields{
		"duration": duration,
	}).Info("Request processed")
}

在这个示例中,我们使用logrus库记录了请求的方法、URL和处理时长。当收到请求时,会记录一条包含请求信息的日志;处理完请求后,会记录一条包含处理时长的日志。

运行这个程序,然后访问http://localhost:8080,你会在控制台看到类似如下的日志输出:

{"method":"GET","url":"/","timestamp":"2022-06-01T08:30:00Z","caller":"main.go:25","level":"info","msg":"Request received"}
{"duration":"100.123ms","timestamp":"2022-06-01T08:30:00Z","caller":"main.go:32","level":"info","msg":"Request processed"}

这样,你就可以通过日志追踪请求流程了。当然,这只是一个简单的示例,你可以根据自己的需求进行扩展和优化。

0