【问题标题】:Sentry Go Integration, how to specify error level?Sentry Go 集成,如何指定错误级别?
【发布时间】:2018-08-08 17:49:24
【问题描述】:

根据官方文档https://docs.sentry.io/clients/go/,您可以使用以下命令在 Sentry 中记录来自 golang 项目的错误:

// For Errors
raven.CapturePanic(func() {
    // do all of the scary things here
}, nil)

// For panic
if err != nil {
   raven.CaptureErrorAndWait(err, nil)
   log.Panic(err)
}

这就像一个魅力,问题在于 Sentry 中的两个函数都以“错误”级别记录。任何人都知道如何为每个呼叫指定日志记录级别?在 Python 中非常明确,但我在 Go 中看不到。

【问题讨论】:

  • SeverityPacket 的字段。要设置严重性,您必须手动构建数据包并调用Capture
  • 谢谢@Peter,我希望有一个更直接的解决方案,因为指定错误级别对于日志记录非常重要。

标签: go sentry


【解决方案1】:

使用sentry-go SDK,在Scope上设置Level。

文档:

例子:

    sentry.WithScope(func(scope *sentry.Scope) {
        scope.SetLevel(sentry.LevelFatal)
        sentry.CaptureException(errors.New("example error"))
    })

【讨论】:

    【解决方案2】:

    我听从了 cmets 的建议,想出了这个:

    // sentryErrorCapture sends error data to Sentry asynchronously. Use for non-Fatal errors.
    var sentryErrorCapture = func(err error, severity raven.Severity, tags map[string]string, interfaces ...raven.Interface) string {
        packet := newSentryPackage(err, severity, tags, interfaces...)
        eventID, _ := raven.Capture(packet, tags)
        return eventID
    }
    
    
    func newSentryPackage(err error, severity raven.Severity, tags map[string]string, interfaces ...raven.Interface) (packet *raven.Packet) {
        interfaces = append(interfaces,
            raven.NewException(err, raven.GetOrNewStacktrace(err, 1, 3, raven.IncludePaths())))
    
        packet = &raven.Packet{
            Message:    err.Error(),
            Level:      severity,
            Interfaces: interfaces,
            Extra:      getSentryExtraInfo(),
        }
        return
    }
    

    当我想记录一个指定我调用的级别的错误时:sentryErrorCapture(err, raven.ERROR, nil)

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 2019-01-17
      • 2015-03-11
      • 2019-10-11
      • 2020-10-01
      • 1970-01-01
      • 2019-12-01
      • 2012-10-31
      • 2017-08-10
      相关资源
      最近更新 更多