slimtoolkit/slim · error

unknown log-level %q

Error message

unknown log-level %q

What it means

setLogLevel validates a user-supplied log level name against a fixed whitelist (trace, debug, info, warn, error, fatal, panic). If the name doesn't match any case, it returns this error instead of setting the log level. It exists to fail fast on invalid configuration rather than silently defaulting.

Source

Thrown at pkg/app/sensor/logger.go:82

	var logLevel log.Level

	switch levelName {
	case "trace":
		logLevel = log.TraceLevel
	case "debug":
		logLevel = log.DebugLevel
	case "info":
		logLevel = log.InfoLevel
	case "warn":
		logLevel = log.WarnLevel
	case "error":
		logLevel = log.ErrorLevel
	case "fatal":
		logLevel = log.FatalLevel
	case "panic":
		logLevel = log.PanicLevel
	default:
		return fmt.Errorf("unknown log-level %q", levelName)
	}

	log.SetLevel(logLevel)
	return nil
}

View on GitHub (pinned to 81940d17fa)

Solutions

  1. Check the exact spelling/casing of the --log-level value against the accepted set: trace, debug, info, warn, error, fatal, panic (all lowercase).
  2. Lowercase/trim the input before passing it to configureLogger.
  3. If you need a new alias, extend the switch statement in setLogLevel in pkg/app/sensor/logger.go.

Example fix

// before
configureLogger("WARNING")
// after
level := strings.ToLower(strings.TrimSpace("WARNING")) // "warning" -> use "warn"
Defensive patterns

Strategy: validation

Validate before calling

var validLevels = map[string]bool{"trace":true,"debug":true,"info":true,"warn":true,"error":true,"fatal":true,"panic":true}
if !validLevels[strings.ToLower(strings.TrimSpace(level))] {
    return fmt.Errorf("unsupported log-level %q", level)
}
// safe to call configureLogger(level)

Try / catch

if err := configureLogger(level); err != nil {
    log.Fatalf("invalid log level %q: %v", level, err)
}

Prevention

When it happens

Trigger: Calling configureLogger (which calls setLogLevel) with a --log-level flag or config value that is not one of the accepted level names, e.g. "verbose", "WARNING" (uppercase), "warning" (if not in the switch), or an empty string.

Common situations: Users passing case-variant names like "INFO" or "Warn", typos like "logg", or copying level names from another logging library that uses different naming (e.g. "critical", "verbose").

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of slimtoolkit/slim@81940d17fa (2026-08-31). Data as JSON: /api/errors/442fcf6d610bbe78. Report an issue: GitHub.