2014-04-14 02:17:20 +04:00
|
|
|
package logrus_airbrake
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
|
|
"github.com/tobi/airbrake-go"
|
|
|
|
)
|
|
|
|
|
|
|
|
// AirbrakeHook to send exceptions to an exception-tracking service compatible
|
|
|
|
// with the Airbrake API. You must set:
|
|
|
|
// * airbrake.Endpoint
|
|
|
|
// * airbrake.ApiKey
|
2015-03-06 19:32:18 +03:00
|
|
|
// * airbrake.Environment
|
2014-04-14 02:17:20 +04:00
|
|
|
//
|
2014-05-04 04:32:21 +04:00
|
|
|
// Before using this hook, to send an error. Entries that trigger an Error,
|
|
|
|
// Fatal or Panic should now include an "error" field to send to Airbrake.
|
2014-04-14 02:17:20 +04:00
|
|
|
type AirbrakeHook struct{}
|
|
|
|
|
|
|
|
func (hook *AirbrakeHook) Fire(entry *logrus.Entry) error {
|
|
|
|
if entry.Data["error"] == nil {
|
|
|
|
entry.Logger.WithFields(logrus.Fields{
|
|
|
|
"source": "airbrake",
|
|
|
|
"endpoint": airbrake.Endpoint,
|
|
|
|
}).Warn("Exceptions sent to Airbrake must have an 'error' key with the error")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2014-07-13 22:49:59 +04:00
|
|
|
err, ok := entry.Data["error"].(error)
|
|
|
|
if !ok {
|
2014-04-14 02:17:20 +04:00
|
|
|
entry.Logger.WithFields(logrus.Fields{
|
|
|
|
"source": "airbrake",
|
|
|
|
"endpoint": airbrake.Endpoint,
|
2014-07-13 22:49:59 +04:00
|
|
|
}).Warn("Exceptions sent to Airbrake must have an `error` key of type `error`")
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
airErr := airbrake.Notify(err)
|
|
|
|
if airErr != nil {
|
|
|
|
entry.Logger.WithFields(logrus.Fields{
|
|
|
|
"source": "airbrake",
|
|
|
|
"endpoint": airbrake.Endpoint,
|
|
|
|
"error": airErr,
|
2014-04-14 02:17:20 +04:00
|
|
|
}).Warn("Failed to send error to Airbrake")
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (hook *AirbrakeHook) Levels() []logrus.Level {
|
|
|
|
return []logrus.Level{
|
2014-07-16 02:30:01 +04:00
|
|
|
logrus.ErrorLevel,
|
|
|
|
logrus.FatalLevel,
|
|
|
|
logrus.PanicLevel,
|
2014-04-14 02:17:20 +04:00
|
|
|
}
|
|
|
|
}
|