slimtoolkit/slim · error
unknown log-format %q
Error message
unknown log-format %q
What it means
setLogFormat maps the configured format string to a logrus formatter: 'text' uses a colorless TextFormatter, 'json' uses JSONFormatter. Any other value falls into the default branch and returns this error, which configureLogger surfaces as 'failed to set log format'.
Source
Thrown at pkg/app/sensor/logger.go:52
f, err := os.OpenFile(logFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
return fmt.Errorf("failed to set log output destination to %q: %w", logFile, err)
}
log.SetOutput(f)
}
return nil
}
func setLogFormat(format string) error {
switch format {
case "text":
log.SetFormatter(&log.TextFormatter{DisableColors: true})
case "json":
log.SetFormatter(&log.JSONFormatter{})
default:
return fmt.Errorf("unknown log-format %q", format)
}
return nil
}
func setLogLevel(enableDebug bool, levelName string) error {
if enableDebug {
log.SetLevel(log.DebugLevel)
return nil
}
var logLevel log.Level
switch levelName {
case "trace":
logLevel = log.TraceLevel
case "debug":
logLevel = log.DebugLevelView on GitHub (pinned to 81940d17fa)
Solutions
- Use exactly 'text' or 'json' (lowercase) for --log-format.
- If the value comes from an env var or template, validate/normalize it (strings.TrimSpace, lowercase) before passing it.
- Omit the flag entirely to keep the default formatter.
Example fix
// before
if format == "" { format = "JSON" } // wrong casing/empty
// after
format = strings.ToLower(strings.TrimSpace(format))
if format != "text" && format != "json" { format = "text" } Defensive patterns
Strategy: validation
Validate before calling
func normalizeFormat(f string) string {
f = strings.ToLower(strings.TrimSpace(f))
if f != "text" && f != "json" { return "text" }
return f
} Type guard
func isUnknownFormatError(err error) bool {
return err != nil && strings.Contains(err.Error(), "unknown log-format")
} Try / catch
if err := Run(ctx); err != nil && strings.Contains(err.Error(), "unknown log-format") {
fmt.Fprintf(os.Stderr, "unsupported format, must be text or json: %v\n", err)
os.Exit(2)
} Prevention
- Use a small allowlist (text|json) at the config boundary and reject anything else early.
- Lowercase and trim any format value sourced from env vars or templates.
- Add a startup smoke test that exercises the configured log format.
- Prefer omitting the flag and relying on the default formatter.
When it happens
Trigger: Passing a --log-format value other than 'text' or 'json' to the sensor, including empty strings from unset environment variables or templating mistakes.
Common situations: Users try formatter names from other logging libraries ('console', 'cli', 'logfmt'); CI injects an unsupported default; a typo such as 'jsn' or 'JSON' (case-sensitive switch).
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- failed to set log-level: %v
- failed to set log format: %v
- unknown log-level %q
- failed to set log output destination to %q, touch failed wit
- No global params
AI-assisted analysis of slimtoolkit/slim@81940d17fa (2026-08-31).
Data as JSON: /api/errors/2a0a138bfd903c28.
Report an issue: GitHub.