forked from sirupsen/logrus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
airbrake.go
43 lines (37 loc) · 1.06 KB
/
airbrake.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package logrus
import (
"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
// * airbrake.Environment (only sends exceptions when set to "production")
//
// Before using this hook, to send exceptions. Entries that trigger an Error,
// Fatal or Panic should now include an "Error" field to send to Airbrake.
type AirbrakeHook struct{}
func (hook *AirbrakeHook) Fire(entry *Entry) error {
if entry.Data["error"] == nil {
entry.Logger.WithFields(Fields{
"source": "airbrake",
"endpoint": airbrake.Endpoint,
}).Warn("Exceptions sent to Airbrake must have an 'error' key with the error")
return nil
}
err := airbrake.Notify(entry.Data["error"].(error))
if err != nil {
entry.Logger.WithFields(Fields{
"source": "airbrake",
"endpoint": airbrake.Endpoint,
}).Warn("Failed to send error to Airbrake")
}
return nil
}
func (hook *AirbrakeHook) Levels() []Level {
return []Level{
Error,
Fatal,
Panic,
}
}