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  }