github.com/yoogoc/kratos-scaffold@v0.0.0-20240402032722-a538b3c18955/project_generator/resources/log.log.go.tmpl (about)

     1  {{- /*gotype: github.com/yoogoc/kratos-scaffold/project_generator.LogTmpl*/ -}}
     2  package log
     3  
     4  import (
     5  	"{{.AppPkgPath}}/internal/conf"
     6  	"{{.ModName}}/pkg/contrib"
     7  	"os"
     8  
     9  	"github.com/go-kratos/kratos/v2/log"
    10  	"github.com/google/wire"
    11  	"go.uber.org/zap"
    12  	"go.uber.org/zap/zapcore"
    13  )
    14  
    15  // log level: debug info warn error dpanic panic fatal
    16  
    17  type VersionString string
    18  type NameString string
    19  
    20  var ProviderSet = wire.NewSet(NewZapLogger, NewKratosLogger)
    21  
    22  func NewZapLogger(config *conf.Log) *zap.Logger {
    23  	encoderConfig := zapcore.EncoderConfig{
    24  		TimeKey:        "t",
    25  		LevelKey:       "level",
    26  		NameKey:        "logger",
    27  		CallerKey:      "caller",
    28  		MessageKey:     "msg",
    29  		StacktraceKey:  "stack",
    30  		EncodeTime:     zapcore.ISO8601TimeEncoder,
    31  		LineEnding:     zapcore.DefaultLineEnding,
    32  		EncodeLevel:    zapcore.LowercaseLevelEncoder,
    33  		EncodeDuration: zapcore.SecondsDurationEncoder,
    34  		EncodeCaller:   zapcore.FullCallerEncoder,
    35  	}
    36  
    37  	if config == nil {
    38  		config = new(conf.Log)
    39  	}
    40  
    41  	if config.Level == "" {
    42  		config.Level = "debug"
    43  	}
    44  	level, _ := zap.ParseAtomicLevel(config.Level)
    45  
    46  	encoder := zapcore.NewJSONEncoder(encoderConfig)
    47  	core := zapcore.NewCore(
    48  		encoder,
    49  		zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)),
    50  		level,
    51  	)
    52  	zapLogger := zap.New(core,
    53  		zap.AddStacktrace(zap.NewAtomicLevelAt(zapcore.ErrorLevel)),
    54  		zap.AddCaller(),
    55  		zap.AddCallerSkip(2),
    56  		zap.Development())
    57  	return zapLogger
    58  }
    59  
    60  func NewKratosLogger(zlog *zap.Logger, conf *conf.Log, name NameString, version VersionString) log.Logger {
    61  	if conf != nil && conf.Type == "zap" {
    62  		return log.With(contrib.NewLogger(zlog),
    63  			"service.name", name,
    64  			"service.version", version,
    65  		)
    66  	}
    67  	return log.With(log.NewStdLogger(os.Stdout),
    68  		"service.name", name,
    69  		"service.version", version,
    70  		"ts", log.DefaultTimestamp,
    71  		"caller", log.DefaultCaller,
    72  	)
    73  }