package logger import ( "log/slog" "os" "strings" "time" ) // New builds a slog.Logger based on level and format configuration. func New(level, format string) *slog.Logger { slogLevel := parseLevel(level) var handler slog.Handler opts := &slog.HandlerOptions{ Level: slogLevel, AddSource: true, ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr { if a.Key == slog.TimeKey { a.Value = slog.StringValue(time.Now().UTC().Format(time.RFC3339Nano)) } return a }, } switch strings.ToLower(format) { case "json": handler = slog.NewJSONHandler(os.Stdout, opts) default: handler = slog.NewTextHandler(os.Stdout, opts) } return slog.New(handler) } func parseLevel(level string) slog.Level { switch strings.ToLower(level) { case "debug": return slog.LevelDebug case "warn", "warning": return slog.LevelWarn case "error": return slog.LevelError case "info", "": return slog.LevelInfo default: return slog.LevelInfo } }