/
log.go
70 lines (53 loc) · 1.42 KB
/
log.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
// Package log provides the log
package log
import (
"encoding/json"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
defaultLogger *logger
loggers = map[string]Logger{}
)
// DefaultLoggerName is the default logger name
const DefaultLoggerName = "default"
func init() {
defaultLogger = newLogger(&DefaultConfig)
loggers[DefaultLoggerName] = defaultLogger
}
type logger struct {
*zap.SugaredLogger
}
// WithFields add customs fields to logger
func (l *logger) WithFields(fields ...any) Logger {
return &logger{l.WithOptions(zap.AddStacktrace(zapcore.WarnLevel)).With(fields...)}
}
// RegisterLogger register a logger with name
func RegisterLogger(loggerName string, c *Config, opts ...OptionFunc) {
cjson, _ := json.Marshal(c)
Infof("Register Logger [%s] with config: %s", loggerName, string(cjson))
for _, opt := range opts {
opt(c)
}
log := newLogger(c)
if loggerName == DefaultLoggerName {
defaultLogger = log
}
loggers[loggerName] = log
}
// GetLoggerByName get logger by name
func GetLoggerByName(loggerName string) Logger {
if logger, ok := loggers[loggerName]; ok {
return logger
}
Warnf("logger %s not found, use default logger", loggerName)
return defaultLogger
}
// OptionFunc is the option function for LogConfig
type OptionFunc func(config *Config)
// WithCallerSkip set caller skip
func WithCallerSkip(callerSkip int) OptionFunc {
return func(c *Config) {
c.CallerSkip = callerSkip
}
}