首页 > 编程语言 >用Golang记录API请求日志

用Golang记录API请求日志

来源:互联网 2026-07-13 08:07:00

在Go语言中,使用标准库log记录API请求需搭建一个HTTP服务器,在处理器中调用logRequest函数记录请求的IP、方法、URL、请求头和请求体。注意请求体只能读取一次,需通过ioutil包的ReadAll函数读取后重置r.Body字段,以便后续处理复用。

如何在Go语言中使用标准库log记录API请求

在Go语言中,记录API请求可以通过标准库log实现,虽然第三方库如logruszap提供了更丰富的功能,但本文先从标准库开始,介绍最基本的做法。

用Golang记录API请求日志

长期稳定更新的攒劲资源: >>>点此立即查看<<<

首先搭建一个最简单的HTTP服务器:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", handleRequest)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
    logRequest(r)
    fmt.Fprintf(w, "Hello, World!")
}

然后在handleRequest中调用logRequest来记录请求信息:

func logRequest(r *http.Request) {
    log.Printf("Request: %s %s %s", r.RemoteAddr, r.Method, r.URL)
    log.Printf("Headers: %v", r.Header)
    log.Printf("Body: %s", r.Body)
}

注意:请求体只能读取一次

上述示例会打印每个请求的IP、HTTP方法、URL、请求头和请求体。但存在一个问题:r.Body只能读取一次,读取后内容即被消耗。为了让后续处理逻辑能够再次读取请求体,需要自定义一个io.ReadCloser,将Body缓存起来。

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", handleRequest)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
    logRequest(r)
    fmt.Fprintf(w, "Hello, World!")
}

func logRequest(r *http.Request) {
    log.Printf("Request: %s %s %s", r.RemoteAddr, r.Method, r.URL)
    log.Printf("Headers: %v", r.Header)

    bodyBytes, err := ioutil.ReadAll(r.Body)
    if err != nil {
        log.Printf("Error reading body: %v", err)
        return
    }
    defer r.Body.Close()

    log.Printf("Body: %s", bodyBytes)

    // 重置请求体,让后续处理器能再次读取
    r.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
}

这样一来,标准库log就能稳定地记录API请求。如果未来觉得标准库功能不足——例如需要分级日志或结构化输出——再考虑logruszap也不迟。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。