/
multi.go
56 lines (47 loc) · 1.08 KB
/
multi.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
package multi
import (
"github.com/go-bamboo/pkg/log/core"
"go.uber.org/zap/zapcore"
)
type multiCore struct {
hooks []core.Logger
core zapcore.Core
}
// NewMultiCore new a zap logger with options.
func NewMultiCore(opts ...core.Logger) (core.Logger, error) {
hooks := make([]zapcore.Core, 0)
for _, opt := range opts {
hooks = append(hooks, opt)
}
c := zapcore.NewTee(hooks...)
zl := &multiCore{
hooks: opts,
core: c,
}
return zl, nil
}
func (c *multiCore) Close() {
for _, hook := range c.hooks {
hook.Close()
}
}
// With 复制操作
func (c *multiCore) With(fields []zapcore.Field) zapcore.Core {
core := c.core.With(fields)
return &multiCore{
hooks: c.hooks,
core: core,
}
}
func (c *multiCore) Enabled(lvl zapcore.Level) bool {
return c.core.Enabled(lvl)
}
func (c *multiCore) Check(ent zapcore.Entry, ce *zapcore.CheckedEntry) *zapcore.CheckedEntry {
return c.core.Check(ent, ce)
}
func (c *multiCore) Write(ent zapcore.Entry, fields []zapcore.Field) error {
return c.core.Write(ent, fields)
}
func (c *multiCore) Sync() error {
return c.core.Sync()
}