0

如果我的服务器处理请求并将响应代码写入大于 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
        }

})

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

4

1 回答 1

0

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

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())
    }

})

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

于 2020-02-12T15:15:06.283 回答