package logger import ( "context" "github.com/go-logr/logr" "github.com/go-logr/zapr" "github.com/mattn/go-colorable" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func SetupLogger(levelTxt string) *zap.Logger { level, err := zapcore.ParseLevel(levelTxt) if err != nil { level = zapcore.ErrorLevel } aa := zap.NewDevelopmentEncoderConfig() aa.EncodeLevel = zapcore.CapitalColorLevelEncoder aa.TimeKey = "" bb := zap.New(zapcore.NewCore( zapcore.NewConsoleEncoder(aa), zapcore.AddSync(colorable.NewColorableStdout()), level, )) return bb } func NewLogger(ctx context.Context, levelTxt string) context.Context { log := zapr.NewLogger(SetupLogger(levelTxt)) ctx = logr.NewContext(ctx, log) return ctx } func FromContext(ctx context.Context) logr.Logger { log, err := logr.FromContext(ctx) if err == nil { return log } return zapr.NewLogger(zap.NewExample()) } func ToContext(ctx context.Context, logger logr.Logger) context.Context { return logr.NewContext(ctx, logger) }