Go Web日志中间件通过包装http.Handler拦截请求,记录方法、路径、状态码、耗时、客户端IP等;需自定义ResponseWriter捕获状态码和响应字节数,建议结构化输出并过滤敏感信息。

在 Go Web 开发中,用中间件记录请求日志是最常用、最轻量也最可控的方式。核心思路是:在 HTTP 处理链的入口处拦截请求,记录方法、路径、状态码、耗时、客户端 IP 等关键信息,再交给后续 handler 处理。
中间件本质是一个接收 http.Handler 并返回新 http.Handler 的函数。它包装原始 handler,在执行前后插入日志逻辑:
time.Now() 记录开始时间,time.Since() 计算耗时req.RemoteAddr 或 X-Forwarded-For 头提取真实客户端 IPResponseWriter 包装器,捕获写入时的状态码和响应字节数Go 的 http.ResponseWriter 默认不暴露状态码和写入长度,需自行封装:
http.ResponseWriter,并添加 status 和 written 字段WriteHeader(statusCode int) 方法,保存状态码Write(p []byte) (int, error) 方法,累加写入字节数,并在首次写入时补调 WriteHeader(http.StatusOK)
以 net/http 为例,直接用 http.Handle 或 http.HandleFunc 套一层中间件即可:
立即学习“go语言免费学习笔记(深入)”;
http.Handle("/api/", loggingMiddleware(http.StripPrefix("/api", apiHandler)))router.Use(Logger());Echo 则是 e.Use(middleware.Logger())(内置)zap 或 zerolog,支持异步写入、滚动切割、JSON 输出等基本上就这些。不复杂但容易忽略细节——尤其是状态码捕获和 client IP 的正确提取。写一次,所有路由自动受益。
以上就是如何使用Golang实现Web日志记录_使用中间件记录请求信息的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号