package logging import ( "fmt" "log/slog" "os" "strings" ) func Setup(level, format string) error { var parsedLevel slog.Level if err := parsedLevel.UnmarshalText([]byte(level)); err != nil { return fmt.Errorf("LOG_LEVEL must be debug, info, warn or error: %w", err) } options := &slog.HandlerOptions{Level: parsedLevel} var handler slog.Handler switch strings.ToLower(format) { case "text": handler = slog.NewTextHandler(os.Stdout, options) case "json": handler = slog.NewJSONHandler(os.Stdout, options) default: return fmt.Errorf("LOG_FORMAT must be text or json, got %q", format) } slog.SetDefault(slog.New(handler)) return nil } func Fatal(message string, err error, attributes ...any) { slog.Error(message, append(attributes, "error", err)...) os.Exit(1) }