/
zap_log_helper.go
74 lines (61 loc) · 1.26 KB
/
zap_log_helper.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
73
74
package log
import (
"context"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type Option func(c *ZapHelperBuilder)
func AddHook(hook Hook) Option {
return func(c *ZapHelperBuilder) {
c.hooks.Add(hook)
}
}
type ZapHelperBuilder struct {
hooks LevelHooks
}
func NewHelper(logger *zap.Logger, opt ...Option) Helper {
var cfg = &ZapHelperBuilder{hooks: make(LevelHooks, 6)}
for _, v := range opt {
v(cfg)
}
c := zapLoggerHelper{
logger: logger,
Hooks: cfg.hooks,
}
c.initLogLevel()
return &c
}
type zapLoggerHelper struct {
logger *zap.Logger
Hooks LevelHooks
level zapcore.Level
}
func (c *zapLoggerHelper) WithContext(ctx context.Context) FieldLogger {
return &zapFieldLogger{
ctx: ctx,
helper: c,
entry: newZapLogEntry(ctx),
}
}
func (c *zapLoggerHelper) levelEnabled(level zapcore.Level) bool {
return c.level <= level
}
// 初始化 level 值
func (c *zapLoggerHelper) initLogLevel() {
var levels = []zapcore.Level{
zapcore.DebugLevel,
zapcore.InfoLevel,
zapcore.WarnLevel,
zapcore.ErrorLevel,
zapcore.FatalLevel,
}
for _, v := range levels {
if c.logger.Core().Enabled(v) {
c.level = v
break
}
}
}
func newZapLogEntry(ctx context.Context) Entry {
return &zapLoggerEntry{ctx: ctx, fields: make([]zap.Field, 0, 3)}
}