debian

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

小樊
51
2025-08-29 14:49:15
栏目: 编程语言

在Debian系统上使用Golang编写应用程序时,记录请求信息通常涉及到使用日志库来捕获和记录HTTP请求的相关数据。以下是一个简单的示例,展示了如何在Golang中使用标准库log来记录HTTP请求的信息:

package main

import (
	"log"
	"net/http"
)

func loggingMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		// 记录请求信息
		log.Printf("Started %s %s from %s", r.Method, r.URL.Path, r.RemoteAddr)

		// 创建一个响应记录器,用于捕获响应的状态码
		record := &responseRecorder{ResponseWriter: w}

		// 调用下一个处理器
		next.ServeHTTP(record, r)

		// 记录响应状态码
		log.Printf("Completed %s %s with status %d", r.Method, r.URL.Path, record.statusCode)
	})
}

type responseRecorder struct {
	http.ResponseWriter
	statusCode int
}

func (r *responseRecorder) WriteHeader(code int) {
	r.statusCode = code
	r.ResponseWriter.WriteHeader(code)
}

func mainHandler(w http.ResponseWriter, r *http.Request) {
	// 处理请求并写入响应
	w.Write([]byte("Hello, World!"))
}

func main() {
	// 创建一个HTTP处理器,并添加日志中间件
	http.Handle("/", loggingMiddleware(http.HandlerFunc(mainHandler)))

	// 启动HTTP服务器
	log.Println("Server starting on :8080")
	if err := http.ListenAndServe(":8080", nil); err != nil {
		log.Fatal(err)
	}
}

在这个示例中,我们定义了一个loggingMiddleware函数,它是一个HTTP中间件,用于记录每个请求的方法、URL路径和客户端地址。我们还定义了一个responseRecorder结构体,它实现了http.ResponseWriter接口,用于捕获响应的状态码。

当一个请求到达时,loggingMiddleware会记录请求信息,然后调用下一个处理器(在这个例子中是mainHandler)。在处理器完成处理并发送响应后,loggingMiddleware会记录响应的状态码。

要运行这个示例,请将代码保存到一个.go文件中,例如main.go,然后在终端中运行以下命令:

$ go run main.go

服务器将在端口8080上启动,你可以使用浏览器或其他HTTP客户端访问http://localhost:8080,并在Debian系统的日志中查看记录的请求信息。如果你想将日志输出到特定的文件,可以在log.Printf函数中使用log.SetOutput函数设置日志输出目标。

0
看了该问题的人还看了