在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函数设置日志输出目标。