Add Sentry integration

This commit is contained in:
Maximilian Paß
2021-11-24 16:30:01 +01:00
parent 705d358027
commit 3ae83217d7
8 changed files with 183 additions and 3 deletions

View File

@ -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 {

View 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,
}
}