Total Lines | 57 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | package logger |
||
2 | |||
3 | import ( |
||
4 | "strings" |
||
5 | |||
6 | "github.com/getsentry/sentry-go" |
||
7 | "github.com/memnix/memnix-rest/config" |
||
8 | "github.com/uptrace/opentelemetry-go-extra/otelzap" |
||
9 | "go.uber.org/zap" |
||
10 | "go.uber.org/zap/zapcore" |
||
11 | ) |
||
12 | |||
13 | // ConvertSentryLevel converts a zapcore.Level to a sentry.Level |
||
14 | func ConvertSentryLevel(level zapcore.Level) sentry.Level { |
||
15 | switch level { |
||
16 | case zapcore.InvalidLevel: |
||
17 | return sentry.LevelFatal |
||
18 | case zapcore.DebugLevel: |
||
19 | return sentry.LevelDebug |
||
20 | case zapcore.InfoLevel: |
||
21 | return sentry.LevelInfo |
||
22 | case zapcore.WarnLevel: |
||
23 | return sentry.LevelWarning |
||
24 | case zapcore.ErrorLevel: |
||
25 | return sentry.LevelError |
||
26 | case zapcore.DPanicLevel: |
||
27 | return sentry.LevelFatal |
||
28 | case zapcore.PanicLevel: |
||
29 | return sentry.LevelFatal |
||
30 | case zapcore.FatalLevel: |
||
31 | return sentry.LevelFatal |
||
32 | default: |
||
33 | return sentry.LevelFatal |
||
34 | } |
||
35 | } |
||
36 | |||
37 | func CreateZapLogger() (*otelzap.Logger, func()) { |
||
38 | zapLogger, _ := zap.NewProduction(zap.Hooks(func(entry zapcore.Entry) error { |
||
39 | defer sentry.Flush(config.SentryFlushTimeout) |
||
40 | if entry.Level <= zapcore.InfoLevel { |
||
41 | return nil |
||
42 | } |
||
43 | msg := strings.Builder{} |
||
44 | msg.WriteString(entry.Message) |
||
45 | msg.WriteString(" ") |
||
46 | msg.WriteString(entry.Caller.TrimmedPath()) |
||
47 | event := sentry.NewEvent() |
||
48 | event.Message = msg.String() |
||
49 | event.Level = ConvertSentryLevel(entry.Level) |
||
50 | sentry.CaptureEvent(event) |
||
51 | return nil |
||
52 | })) |
||
53 | |||
54 | logger := otelzap.New(zapLogger, otelzap.WithTraceIDField(false)) |
||
55 | undo := otelzap.ReplaceGlobals(logger) |
||
56 | |||
57 | return logger, undo |
||
58 | } |
||
59 |