-
Notifications
You must be signed in to change notification settings - Fork 0
/
logger.go
69 lines (53 loc) · 1.42 KB
/
logger.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package database
import (
"context"
"log/slog"
"github.com/cornelk/gotokit/log"
"github.com/jackc/pgx/v5/tracelog"
)
// Logger implements a database logger.
type Logger struct {
logger *log.Logger
}
// NewLogger returns a new database logger based on the given logger.
func NewLogger(logger *log.Logger) *Logger {
return &Logger{
logger: logger,
}
}
// Log a message from the database package.
func (l *Logger) Log(ctx context.Context, level tracelog.LogLevel, msg string, data map[string]any) {
if level == tracelog.LogLevelNone {
return
}
fields := make([]any, 0, len(data))
for k, v := range data {
fields = append(fields, slog.Any(k, v))
}
switch level {
case tracelog.LogLevelTrace, tracelog.LogLevelDebug:
l.logger.Log(ctx, log.DebugLevel, msg, fields...)
case tracelog.LogLevelInfo:
l.logger.Log(ctx, log.InfoLevel, msg, fields...)
case tracelog.LogLevelWarn:
l.logger.Log(ctx, log.WarnLevel, msg, fields...)
case tracelog.LogLevelError:
l.logger.Log(ctx, log.ErrorLevel, msg, fields...)
}
}
// Level returns the minimum enabled log level.
func (l *Logger) Level() tracelog.LogLevel {
level := l.logger.Level()
switch level {
case log.DebugLevel:
return tracelog.LogLevelDebug
case log.InfoLevel:
return tracelog.LogLevelInfo
case log.WarnLevel:
return tracelog.LogLevelWarn
case log.ErrorLevel, log.FatalLevel:
return tracelog.LogLevelError
default:
return tracelog.LogLevelNone
}
}