reflex-dev/reflex · error · EnvironmentVarValueError
Invalid log level value: {value} for {field_name}
Error message
Invalid log level value: {value} for {field_name} What it means
For fields typed as LogLevel, interpret_env_var_value calls LogLevel.from_string(value); an unrecognized string (not a standard level name like 'debug', 'info', 'warning', 'error', 'critical') yields None and raises EnvironmentVarValueError.
Source
Thrown at packages/reflex-base/src/reflex_base/environment.py:323
for arg in (union_types := get_args(field_type)):
try:
return interpret_env_var_value(value, arg, field_name)
except (ValueError, EnvironmentVarValueError) as e: # noqa: PERF203
errors.append(e)
msg = f"Could not interpret {value!r} for {field_name} as any of {union_types}: {errors}"
raise EnvironmentVarValueError(msg)
value = value.strip()
if field_type is bool:
return interpret_boolean_env(value, field_name)
if field_type is str:
return value
if field_type is LogLevel:
loglevel = LogLevel.from_string(value)
if loglevel is None:
msg = f"Invalid log level value: {value} for {field_name}"
raise EnvironmentVarValueError(msg)
return loglevel
if field_type is int:
return interpret_int_env(value, field_name)
if field_type is float:
return interpret_float_env(value, field_name)
if field_type is Path:
if PathExistsFlag in annotated_metadata:
return interpret_existing_path_env(value, field_name)
return interpret_path_env(value, field_name)
if field_type is ExistingPath:
return interpret_existing_path_env(value, field_name)
if field_type is Plugin:
return interpret_plugin_env(value, field_name)
if get_origin(field_type) is type:
type_args = get_args(field_type)
if (
type_args
and isinstance(type_args[0], type)View on GitHub (pinned to 45b8ed5ab7)
Solutions
- Use a standard level name accepted by LogLevel.from_string (e.g. 'debug', 'info', 'warning', 'error')
- Trim whitespace/quotes from the value
- If 'trace'/'notice' style levels are needed, map them to the nearest supported level at the deployment layer
Example fix
# before LOG_LEVEL=trace # after LOG_LEVEL=debug
Defensive patterns
Strategy: validation
Validate before calling
VALID = {"debug", "info", "warning", "error", "critical"}
v = os.environ.get("LOG_LEVEL", "info").strip().lower()
assert v in VALID, f"LOG_LEVEL must be one of {sorted(VALID)}" Type guard
def is_valid_log_level(v: str) -> bool:
return LogLevel.from_string(v.strip()) is not None Try / catch
except EnvironmentVarValueError:
level = LogLevel.INFO # fallback Prevention
- Normalize log level strings at deploy time (map trace->debug, warn->warning)
- Lowercase + strip env values before use
When it happens
Trigger: Setting a log-level env var to a non-level string: LOG_LEVEL=verbose, LOG_LEVEL=DEBUG???, or with stray whitespace/case issues outside what from_string accepts.
Common situations: Using levels from other logging systems ('trace', 'warn' vs 'warning', 'notice'), or copy-paste artifacts in env files.
Related errors
- Invalid boolean value: {value!r} for {field_name}
- Invalid integer value: {value!r} for {field_name}
- Invalid float value: {value!r} for {field_name}
- Invalid enum value: {value!r} for {field_name}
- Could not interpret {value!r} for {field_name} as any of {un
AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28).
Data as JSON: /api/errors/82396588d2eebfcf.
Report an issue: GitHub.