在 Go 中记录 Web 请求和响应信息的关键是通过中间件包装 http.ResponseWriter,捕获状态码与响应体大小,结合请求元数据提取和结构化日志输出;需自定义 ResponseWriter 重写 WriteHeader 和 Write 方法,过滤敏感字段,使用 zap 等库按状态码分级记录结构化日志。

在 Go 中记录 Web 请求和响应信息,关键不是“拦截响应体”,而是通过中间件包装 http.ResponseWriter,同时结合请求解析与结构化日志输出。原生 net/http 不提供响应内容访问接口,需手动封装。
实现一个包装器,嵌入原生 http.ResponseWriter,重写 WriteHeader 和 Write 方法,记录真实状态码和写入字节数:
responseWriter),保存 statusCode、written、size
WriteHeader 中缓存状态码(避免被后续 Write 覆盖)Write 中累加写入长度,并调用底层 Write
在中间件入口处即可获取大部分请求元数据:
r.Method、r.URL.Path、r.URL.RawQuery 直接可用r.Header.Get("X-Forwarded-For") 回退到 r.RemoteAddr
time.Now() 记录开始时间,defer 中计算耗时strings.ReplaceAll(q, "token=", "token=[REDACTED]"))避免拼接字符串日志,使用结构化日志库提升可检索性:
立即学习“go语言免费学习笔记(深入)”;
zap.With(...) 或 zerolog.Dict().Str(...).Int(...) 添加字段logger.Error("request failed", zap.Error(err))),避免混在访问日志中Info,4xx 用 Warn,5xx 用 Error
以下是一个可直接运行的中间件片段:
func loggingMiddleware(next http.Handler) http.Handler {以上就是如何在Golang中管理Web日志_记录请求和响应信息的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号