linux

Golang日志中如何记录请求信息

小樊
45
2025-06-26 05:33:10
栏目: 编程语言

在Golang中,我们可以使用标准库"log"或者第三方库(如logrus、zap等)来记录日志。这里我将为您提供一个使用标准库"log"记录HTTP请求信息的示例。

首先,我们需要导入相关的包:

package main

import (
	"log"
	"net/http"
)

接下来,我们可以创建一个自定义的日志记录器,用于记录请求信息:

type Logger struct {
	logger *log.Logger
}

func NewLogger(prefix string) *Logger {
	return &Logger{
		logger: log.New(log.Writer(), prefix, log.LstdFlags),
	}
}

func (l *Logger) LogRequest(r *http.Request) {
	l.logger.Printf("Request: %s %s %s", r.RemoteAddr, r.Method, r.URL.String())
}

现在,我们可以在HTTP处理函数中使用这个自定义的日志记录器来记录请求信息:

func main() {
	logger := NewLogger("[HTTP] ")

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		logger.LogRequest(r)

		// 处理请求并返回响应
		w.Write([]byte("Hello, World!"))
	})

	log.Fatal(http.ListenAndServe(":8080", nil))
}

在这个示例中,我们创建了一个名为Logger的结构体,它包含一个*log.Logger类型的字段。我们还定义了一个NewLogger函数,用于创建一个新的Logger实例,并设置日志前缀。LogRequest方法用于记录请求信息,包括客户端IP地址、HTTP方法和请求URL。

main函数中,我们创建了一个Logger实例,并将其传递给HTTP处理函数。当有请求到达时,处理函数会调用LogRequest方法记录请求信息。

运行这个程序后,您将看到类似以下的日志输出:

[HTTP] 127.0.0.1:56789 GET /
[HTTP] 127.0.0.1:56790 POST /some-path

这只是一个简单的示例,您可以根据需要对其进行扩展,例如添加更多的请求信息、日志级别等。如果您需要更高级的日志功能,可以考虑使用第三方库,如logrus或zap。

0
看了该问题的人还看了