-
Notifications
You must be signed in to change notification settings - Fork 1
/
adapter.go
72 lines (63 loc) · 1.62 KB
/
adapter.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
70
71
72
package zerolog
import (
"context"
"strings"
"github.com/rs/zerolog"
"github.com/ydb-platform/ydb-go-sdk/v3/log"
)
var _ log.Logger = adapter{}
type adapter struct {
l *zerolog.Logger
}
func (a adapter) Log(ctx context.Context, msg string, fields ...log.Field) {
appendFields(
a.l.WithLevel(level(ctx)).Str("namespace", strings.Join(log.NamesFromContext(ctx), ".")),
fields,
).Msg(msg)
}
func level(ctx context.Context) zerolog.Level {
switch log.LevelFromContext(ctx) {
case log.TRACE:
return zerolog.TraceLevel
case log.DEBUG:
return zerolog.DebugLevel
case log.INFO:
return zerolog.InfoLevel
case log.WARN:
return zerolog.WarnLevel
case log.ERROR:
return zerolog.ErrorLevel
case log.FATAL:
return zerolog.FatalLevel
default:
return zerolog.NoLevel
}
}
func fieldToField(e *zerolog.Event, field log.Field) *zerolog.Event {
switch field.Type() {
case log.IntType:
return e.Int(field.Key(), field.IntValue())
case log.Int64Type:
return e.Int64(field.Key(), field.Int64Value())
case log.StringType:
return e.Str(field.Key(), field.StringValue())
case log.BoolType:
return e.Bool(field.Key(), field.BoolValue())
case log.DurationType:
return e.Dur(field.Key(), field.DurationValue())
case log.StringsType:
return e.Strs(field.Key(), field.StringsValue())
case log.ErrorType:
return e.Err(field.ErrorValue())
case log.StringerType:
return e.Stringer(field.Key(), field.Stringer())
default:
return e.Interface(field.Key(), field.AnyValue())
}
}
func appendFields(e *zerolog.Event, fields []log.Field) *zerolog.Event {
for _, f := range fields {
e = fieldToField(e, f)
}
return e
}