-
Notifications
You must be signed in to change notification settings - Fork 5
/
utils.go
64 lines (52 loc) · 2.02 KB
/
utils.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
package logctx
import (
"context"
"github.com/rs/zerolog"
)
// NewContextFrom returns a child context without cancel and a sub-logger attached.
// If no logger is associated with the given ctx as the parent logger DefaultContextLogger is used if not nil,
// otherwise a disabled logger is used.
func NewContextFrom(ctx context.Context) context.Context {
return NewSubLoggerContext(ctx, *zerolog.Ctx(ctx))
}
// NewSubLoggerContext creates a new logger with an empty context.
func NewSubLoggerContext(ctx context.Context, log zerolog.Logger) context.Context {
return log.With().Logger().WithContext(context.WithoutCancel(ctx))
}
// AddStrToContext adds the key/value to the log context.
func AddStrToContext(ctx context.Context, key, value string) {
zerolog.Ctx(ctx).UpdateContext(func(c zerolog.Context) zerolog.Context {
return c.Str(key, value)
})
}
// AddToContext adds the key/value to the log context.
func AddToContext(ctx context.Context, key string, value any) {
zerolog.Ctx(ctx).UpdateContext(func(c zerolog.Context) zerolog.Context {
return c.Interface(key, value)
})
}
// AddMapToContext adds the map of key/values to the log context.
func AddMapToContext(ctx context.Context, fields map[string]any) {
zerolog.Ctx(ctx).UpdateContext(func(c zerolog.Context) zerolog.Context {
return c.Fields(fields)
})
}
// AddBytesToContext adds the key/value to the log context.
func AddBytesToContext(ctx context.Context, key string, value []byte, maxSize uint32) {
zerolog.Ctx(ctx).UpdateContext(func(c zerolog.Context) zerolog.Context {
return AddBytes(c, key, value, maxSize)
})
}
// AddBytes adds the key/value (truncated by maxSize) to the log context.
func AddBytes(ctx zerolog.Context, key string, value []byte, maxSize uint32) zerolog.Context {
size := len(value)
ctx = ctx.Int(key+".size", size)
if size > int(maxSize) {
ctx = ctx.Bytes(key+".body", value[:maxSize])
ctx = ctx.Bool(key+".truncated", true)
ctx = ctx.Uint32(key+".truncatedSize", maxSize)
} else {
ctx = ctx.Bytes(key+".body", value)
}
return ctx
}