package logger import ( "context" "io" "os" "github.com/pkg/errors" "cdr.dev/slog/sloggers/slogjson" "cdr.dev/slog/sloggers/sloghuman" "cdr.dev/slog" ) type Format string const ( FormatHuman Format = "human" FormatJSON Format = "json" ) var defaultLogger slog.Logger // nolint: gochecknoglobals type Field = slog.Field func init() { // nolint: gochecknoinits defaultLogger = Make(FormatHuman, os.Stdout) } func Make(f Format, w io.Writer) slog.Logger { var logger slog.Logger switch f { case FormatHuman: logger = sloghuman.Make(w) case FormatJSON: logger = slogjson.Make(w) default: panic(errors.Errorf("unknown logger format '%s'", f)) } return logger } func Debug(ctx context.Context, msg string, fields ...Field) { slog.Helper() defaultLogger.Debug(ctx, msg, fields...) } func Info(ctx context.Context, msg string, fields ...Field) { slog.Helper() defaultLogger.Info(ctx, msg, fields...) } func Warn(ctx context.Context, msg string, fields ...Field) { slog.Helper() defaultLogger.Warn(ctx, msg, fields...) } func Error(ctx context.Context, msg string, fields ...Field) { slog.Helper() defaultLogger.Error(ctx, msg, fields...) } func Critical(ctx context.Context, msg string, fields ...Field) { slog.Helper() defaultLogger.Critical(ctx, msg, fields...) } func Fatal(ctx context.Context, msg string, fields ...Field) { slog.Helper() defaultLogger.Fatal(ctx, msg, fields...) } func F(name string, value interface{}) Field { return slog.F(name, value) } func SetFormat(f Format) { defaultLogger = Make(f, os.Stdout) } func SetLevel(level slog.Level) { defaultLogger = defaultLogger.Leveled(level) }