登录
首页 >  Golang >  Go问答

聊聊gin-gonic和nrgin的New Relic中怎么捕获自定义错误消息

来源:Golang技术栈

时间:2023-03-10 13:05:24 235浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《聊聊gin-gonic和nrgin的New Relic中怎么捕获自定义错误消息》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

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

我试图弄清楚如何从处理程序传播自定义错误消息,以便它显示在 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()})

谢谢!

正确答案

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

中间件在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)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表