首页 > 后端开发 > Golang > 正文

如何使用中间件链在 Go 中记录 HTTP 响应?

DDD
发布: 2024-10-28 08:55:29
原创
127 人浏览过

How to Log HTTP Responses in Go with Middleware Chaining?

在 http.HandleFunc 中记录传入 HTTP 请求的响应

为了回答上一个线程中提出的问题,本文建议记录来自实时服务器的 HTTP 响应,而无需求助伪造请求。目标是捕获标头和 JSON 有效负载以进行彻底分析。

利用中间件链接的概念,我们可以创建一个自定义 HTTP 处理程序来拦截响应并记录相关信息。具体方法如下:

中间件链接方法

通过中间件链接,您可以定义可以在主处理程序函数之前或之后执行的中间件函数。这些中间件可以执行各种任务,例如日志记录、验证或安全检查。

实现功能处理程序组合器

我们可以定义自己的功能处理程序组合器,而不是神奇的 negroni 解决方案。每个组合器处理一个特定的任务,并且可以组合起来形成执行链。例如,您可以创建一个用于响应日志记录的组合器:

<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Replace response writer with a recorder for subsequent handlers
        c := httptest.NewRecorder()
        next(c, r)

        // Copy response from recorder to actual response writer
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}</code>
登录后复制

管理中间件链

要将日志记录中间件应用于特定类别中的所有处理程序,我们可以创建一个默认处理程序:

<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}</code>
登录后复制

此组合器确保通过 NewDefaultHandler 创建的所有链都将包含响应日志记录以及 NewOtherStuffHandler 中定义的任何其他默认功能。

通过利用这些技术,您可以无缝记录来自您的实时网络服务,为调试和分析提供宝贵的见解。

以上是如何使用中间件链在 Go 中记录 HTTP 响应?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!