gohugoio/hugo · error
invalid log level: , must be one of debug, warn, info or…
Error message
invalid log level: %q, must be one of debug, warn, info or error
What it means
The --logLevel flag accepts exactly four values: debug, info, warn (or warning), and error (commandeer.go:499-510). Any other string causes createLogger to return this error before the build starts. In devMode (--devMode) the level is forced to trace and this check is bypassed.
Solutions
- Use one of: debug, info, warn, error (warning is also accepted)
- Double-check the spelling of the flag value
- Omit --logLevel to use the default (warn)
Example fix
# before hugo --logLevel trace # after hugo --logLevel debug
Defensive patterns
Strategy: validation
Validate before calling
// Validate the log level string before passing it to Hugo.
var validLogLevels = map[string]bool{"debug": true, "info": true, "warn": true, "warning": true, "error": true}
func validateLogLevel(level string) error {
if level == "" {
return nil
}
if !validLogLevels[strings.ToLower(level)] {
return fmt.Errorf("invalid log level: %q", level)
}
return nil
} Prevention
- Use only debug, info, warn, or error for --logLevel
- Omit --logLevel to keep the default (warn)
- Add shell completion for the flag using cobra's registered completions
When it happens
Trigger: Passing --logLevel trace, --logLevel verbose, --logLevel fatal, or any value outside the allowed set.
Common situations: Assuming 'trace' or 'verbose' are valid log levels; typos like 'warng'; migrating from another tool's log-level vocabulary.
Related errors
- language not found
- unsupported format
- --appendPort=false not supported when in multihost mode
- config needs a filename
- failed to create workingDir
AI-assisted analysis of gohugoio/hugo@52c9bd7908 (2026-08-09).
Data as JSON: /api/errors/28a3134f4edb15b3.
Report an issue: GitHub.
Appendix: source
Thrown at commands/commandeer.go:509
func (r *rootCommand) createLogger(running bool) (loggers.Logger, error) {
level := logg.LevelWarn
if r.devMode {
level = logg.LevelTrace
} else {
if r.logLevel != "" {
switch strings.ToLower(r.logLevel) {
case "debug":
level = logg.LevelDebug
case "info":
level = logg.LevelInfo
case "warn", "warning":
level = logg.LevelWarn
case "error":
level = logg.LevelError
default:
return nil, fmt.Errorf("invalid log level: %q, must be one of debug, warn, info or error", r.logLevel)
}
}
}
var logHookLast func(e *logg.Entry) error
if r.panicOnWarning {
logHookLast = loggers.PanicOnWarningHook
}
optsLogger := loggers.Options{
DistinctLevel: logg.LevelWarn,
Level: level,
StdOut: r.StdOut,
StdErr: r.StdErr,
StoreErrors: running,
HandlerPost: logHookLast,
}
View on GitHub (pinned to 52c9bd7908)