// AutoNotify logs a panic on a goroutine and then repanics. // It should only be used in places that have existing panic handlers further // up the stack. See bugsnag.Recover(). The rawData is used to send extra // information along with any panics that are handled this way. // Usage: defer bugsnag.AutoNotify() func AutoNotify(rawData ...interface{}) { if err := recover(); err != nil { rawData = defaultNotifier.addDefaultSeverity(rawData, SeverityError) defaultNotifier.Notify(errors.New(err, 2), rawData...) panic(err) } }
// Notify sends an error to Bugsnag. Any rawData you pass here will be sent to // Bugsnag after being converted to JSON. e.g. bugsnag.SeverityError, bugsnag.Context, // or bugsnag.MetaData. func (notifier *Notifier) Notify(err error, rawData ...interface{}) (e error) { event, config := newEvent(errors.New(err, 1), rawData, notifier) // Never block, start throwing away errors if we have too many. e = middleware.Run(event, config, func() error { config.log("notifying bugsnag: %s", event.Message) if config.notifyInReleaseStage() { if config.Synchronous { return (&payload{event, config}).deliver() } go (&payload{event, config}).deliver() return nil } return fmt.Errorf("not notifying in %s", config.ReleaseStage) }) if e != nil { config.log("bugsnag.Notify: %v", e) } return e }
// Recover logs a panic on a goroutine and then recovers. // The rawData is used to send extra information along with // any panics that are handled this way // Usage: defer bugsnag.Recover() func Recover(rawData ...interface{}) { if err := recover(); err != nil { rawData = defaultNotifier.addDefaultSeverity(rawData, SeverityWarning) defaultNotifier.Notify(errors.New(err, 2), rawData...) } }
// Notify sends an error to Bugsnag along with the current stack trace. The // rawData is used to send extra information along with the error. For example // you can pass the current http.Request to Bugsnag to see information about it // in the dashboard, or set the severity of the notification. func Notify(err error, rawData ...interface{}) error { return defaultNotifier.Notify(errors.New(err, 1), rawData...) }