package logging import ( "fmt" "io" "log/slog" "strings" ) func New(w io.Writer, level, format string) (*slog.Logger, error) { lvl, err := parseLevel(level) if err != nil { return nil, err } opts := &slog.HandlerOptions{Level: lvl} var h slog.Handler switch strings.ToLower(format) { case "", "text": h = slog.NewTextHandler(w, opts) case "json": h = slog.NewJSONHandler(w, opts) default: return nil, fmt.Errorf("unknown log format %q (want text|json)", format) } return slog.New(h), nil } func parseLevel(s string) (slog.Level, error) { switch strings.ToLower(strings.TrimSpace(s)) { case "", "info": return slog.LevelInfo, nil case "debug": return slog.LevelDebug, nil case "warn", "warning": return slog.LevelWarn, nil case "error": return slog.LevelError, nil default: return 0, fmt.Errorf("unknown log level %q", s) } }