package airbrake import ( "errors" "fmt" "github.com/Sirupsen/logrus" "github.com/tobi/airbrake-go" ) // AirbrakeHook to send exceptions to an exception-tracking service compatible // with the Airbrake API. type airbrakeHook struct { APIKey string Endpoint string Environment string } func NewHook(endpoint, apiKey, env string) *airbrakeHook { return &airbrakeHook{ APIKey: apiKey, Endpoint: endpoint, Environment: env, } } func (hook *airbrakeHook) Fire(entry *logrus.Entry) error { airbrake.ApiKey = hook.APIKey airbrake.Endpoint = hook.Endpoint airbrake.Environment = hook.Environment var notifyErr error err, ok := entry.Data["error"].(error) if ok { notifyErr = err } else { notifyErr = errors.New(entry.Message) } airErr := airbrake.Notify(notifyErr) if airErr != nil { return fmt.Errorf("Failed to send error to Airbrake: %s", airErr) } return nil } func (hook *airbrakeHook) Levels() []logrus.Level { return []logrus.Level{ logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel, } }