gohome
1package logger
2
3import (
4"go.uber.org/zap"
5"go.uber.org/zap/zapcore"
6)
7
8type Config struct {
9Level string
10Encoding string
11Tags []string
12Colored bool
13}
14
15type Logger = zap.Logger
16
17func New(config Config) *Logger {
18cfg := zap.NewProductionConfig()
19var lvl zapcore.Level
20err := lvl.UnmarshalText([]byte(config.Level))
21if err != nil {
22lvl = zap.InfoLevel
23}
24
25cfg.Level.SetLevel(lvl)
26cfg.DisableStacktrace = true
27cfg.Sampling.Initial = 50
28cfg.Sampling.Thereafter = 50
29cfg.Encoding = config.Encoding
30cfg.OutputPaths = []string{"stdout"}
31cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
32logger, err := cfg.Build()
33if err != nil {
34panic(err)
35}
36
37logger = logger.WithOptions(zap.Hooks(func(entry zapcore.Entry) error {
38return nil
39}))
40
41return logger.With(
42zap.Strings("tags", config.Tags),
43)
44}
45