如何在 gin-gonic 和 nrgin 中捕获 New Relic 中的自定义错误消息

How to capture custom error message in New Relic in gin-gonic and nrgin

我正在使用 gin-gonic、newrelic go-agent v3 和 nrgin v3

我正在尝试弄清楚如何从 Handler 传播自定义错误消息,以便它显示在 New Relic 中。

我现在看到的是,当我有一个 returns 和 http.StatusInternalServerError 的处理程序时,错误消息在 New Relic 中显示为“500:内部服务器错误”。

我想弄清楚如何在抛出的错误消息中加上后缀。

这是我现在正在做的,但显然不起作用:

err := errors.New("This is a custom error message!")
c.Error(err)
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})

谢谢!

我认为您必须手动设置交易错误。

nrgin 中间件在 c.Next 之后不执行任何操作,这是您通常检查错误的地方,但是它确实将 newrelic.Transaction 设置到 Gin 上下文中:

// file: github.com/newrelic/go-agent/v3/integrations/nrgin/nrgin.go

func middleware(app *newrelic.Application, useNewNames bool) gin.HandlerFunc {
    return func(c *gin.Context) {
        if app != nil {
            // ... omitted 

            c.Set(internal.GinTransactionContextKey, txn)
        }
        c.Next()
        // here is where you would typically inspect Gin errors, 
        // i.e. after the handler chain
    }
}

因此,在您的 Gin 处理程序中,提取 newrelic.Transaction 并在其上设置错误:

err := errors.New("This is a custom error message!")
txn := nrgin.Transaction(c)
txn.NoticeError(err)