【问题标题】:How to capture custom error message in New Relic in gin-gonic and nrgin如何在 gin-gonic 和 nrgin 中捕获 New Relic 中的自定义错误消息
【发布时间】:2021-05-13 12:55:33
【问题描述】:

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

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

我现在看到的是,当我有一个返回 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()})

谢谢!

【问题讨论】:

    标签: go newrelic go-gin


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 这非常有用。谢谢@blackgreen!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多