【问题标题】:Using Martini middleware, log error if response code is greater than 399使用 Martini 中间件,如果响应代码大于 399,则记录错误
【发布时间】:2020-02-12 01:57:44
【问题描述】:

如果我的服务器处理请求并将响应代码写入大于 399,我想记录错误跟踪:

    bm.Use(func(res http.ResponseWriter, req *http.Request, c martini.Context, log *logging.Logger, statter statsd.Statter) {

        start := time.Now()

        rw := res.(martini.ResponseWriter)

        c.Next()  // do all the middleware handler stuff

        if res.(martini.ResponseWriter).Status() > 399 {
            log.Warning("%v", "print response here")  // how to read response here
        }

})

在给定状态码的情况下,有没有办法读取响应?如果我们将错误发送回客户端,如何截取错误消息并记录下来?

【问题讨论】:

    标签: go martini


    【解决方案1】:

    我在 Martini 的自述文件中找到了c.MapTo。如果我理解正确,这应该有效:

    bm.Use(func(res http.ResponseWriter, req *http.Request, c martini.Context, log *logging.Logger, statter statsd.Statter) {
    
        var rsp bytes.Buffer
    
        rw := io.MultiWriter(res, &rsp)
    
        c.MapTo(rw, (*http.ResponseWriter)(nil))
    
        c.Next()  // do all the middleware handler stuff
    
        if res.(martini.ResponseWriter).Status() > 399 {
            log.Warning("%v", rsp.String())
        }
    
    })
    

    请注意,我不熟悉马提尼酒,所以我不确定这是否可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2011-01-30
      • 2013-05-17
      • 1970-01-01
      相关资源
      最近更新 更多