github.com/yoogoc/kratos-scaffold@v0.0.0-20240402032722-a538b3c18955/project_generator/resources/zap.go.example (about) 1 package contrib 2 3 import ( 4 "fmt" 5 6 "go.uber.org/zap" 7 8 "github.com/go-kratos/kratos/v2/log" 9 ) 10 11 var _ log.Logger = (*Logger)(nil) 12 13 type Logger struct { 14 log *zap.Logger 15 } 16 17 func NewLogger(zlog *zap.Logger) *Logger { 18 return &Logger{zlog} 19 } 20 21 func (l *Logger) Log(level log.Level, keyvals ...interface{}) error { 22 if len(keyvals) == 0 || len(keyvals)%2 != 0 { 23 l.log.Warn(fmt.Sprint("Keyvalues must appear in pairs: ", keyvals)) 24 return nil 25 } 26 27 var data []zap.Field 28 for i := 0; i < len(keyvals); i += 2 { 29 data = append(data, zap.Any(fmt.Sprint(keyvals[i]), keyvals[i+1])) 30 } 31 32 switch level { 33 case log.LevelDebug: 34 l.log.Debug("", data...) 35 case log.LevelInfo: 36 l.log.Info("", data...) 37 case log.LevelWarn: 38 l.log.Warn("", data...) 39 case log.LevelError: 40 l.log.Error("", data...) 41 case log.LevelFatal: 42 l.log.Fatal("", data...) 43 } 44 return nil 45 } 46 47 func (l *Logger) Sync() error { 48 return l.log.Sync() 49 } 50 51 func (l *Logger) Close() error { 52 return l.Sync() 53 }