Add Sentry integration
This commit is contained in:
@ -3,6 +3,7 @@ package logging
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"github.com/getsentry/sentry-go"
|
||||
"github.com/sirupsen/logrus"
|
||||
"net"
|
||||
"net/http"
|
||||
@ -21,6 +22,8 @@ var log = &logrus.Logger{
|
||||
Level: logrus.InfoLevel,
|
||||
}
|
||||
|
||||
const GracefulSentryShutdown = 5 * time.Second
|
||||
|
||||
func InitializeLogging(loglevel string) {
|
||||
level, err := logrus.ParseLevel(loglevel)
|
||||
if err != nil {
|
||||
@ -28,6 +31,11 @@ func InitializeLogging(loglevel string) {
|
||||
return
|
||||
}
|
||||
log.SetLevel(level)
|
||||
log.AddHook(&SentryHook{})
|
||||
log.ExitFunc = func(i int) {
|
||||
sentry.Flush(GracefulSentryShutdown)
|
||||
os.Exit(i)
|
||||
}
|
||||
}
|
||||
|
||||
func GetLogger(pkg string) *logrus.Entry {
|
||||
|
38
pkg/logging/sentry_hook.go
Normal file
38
pkg/logging/sentry_hook.go
Normal file
@ -0,0 +1,38 @@
|
||||
package logging
|
||||
|
||||
import (
|
||||
"github.com/getsentry/sentry-go"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// SentryHook is a simple adapter that converts logrus entries into Sentry events.
|
||||
// Consider replacing this with a more feature rich, additional dependency: https://github.com/evalphobia/logrus_sentry
|
||||
type SentryHook struct{}
|
||||
|
||||
// Fire is triggered on new log entries.
|
||||
func (hook *SentryHook) Fire(entry *logrus.Entry) error {
|
||||
if data, ok := entry.Data["error"]; ok {
|
||||
err, ok := data.(error)
|
||||
if ok {
|
||||
entry.Data["error"] = err.Error()
|
||||
}
|
||||
}
|
||||
|
||||
event := sentry.NewEvent()
|
||||
event.Timestamp = entry.Time
|
||||
event.Level = sentry.Level(entry.Level.String())
|
||||
event.Message = entry.Message
|
||||
event.Extra = entry.Data
|
||||
sentry.CaptureEvent(event)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Levels returns all levels this hook should be registered to.
|
||||
func (hook *SentryHook) Levels() []logrus.Level {
|
||||
return []logrus.Level{
|
||||
logrus.PanicLevel,
|
||||
logrus.FatalLevel,
|
||||
logrus.ErrorLevel,
|
||||
logrus.WarnLevel,
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user