cube-js/cube · error
Invalid log level: ${filterByLevel}
Error message
Invalid log level: ${filterByLevel} What it means
createLogger validates the filterByLevel argument against the known log levels (trace/debug/info/warn/error, with some allowed no-op cases). Passing any other string is rejected with 'Invalid log level: ...'.
Source
Thrown at packages/cubejs-server-core/src/core/logger.ts:179
logMessage();
break;
}
}
}
};
export const createLogger = (production: boolean, filterByLevel: LogLevel = 'info'): LoggerFn => {
switch (filterByLevel.toLowerCase()) {
case 'trace':
case 'info':
case 'warn':
case 'error':
break;
// not used, but let's allow
case 'debug':
break;
default:
throw new Error(`Invalid log level: ${filterByLevel}`);
}
if (production) {
return prodLogger(filterByLevel);
} else {
return devLogger(filterByLevel);
}
};
View on GitHub (pinned to 7d981676b3)
Solutions
- Use a supported level string: 'trace', 'debug', 'info', 'warn', or 'error'
- Check the env var or config that feeds filterByLevel (e.g. CUBEJS_LOG_LEVEL) for typos or unsupported names
- Normalize/whitelist the level before calling createLogger
Example fix
// before
const logger = createLogger('warning');
// after
const logger = createLogger('warn'); Defensive patterns
Strategy: validation
Validate before calling
const LEVELS = ['trace','debug','info','warn','error'];
function safeLevel(level) {
return LEVELS.includes(level) ? level : 'info';
} Type guard
const isValidLogLevel = (l: unknown): l is 'trace'|'debug'|'info'|'warn'|'error' => typeof l === 'string' && ['trace','debug','info','warn','error'].includes(l);
Try / catch
let logger;
try {
logger = createLogger(level);
} catch (e) {
if (e.message.startsWith('Invalid log level:')) {
logger = createLogger('info');
} else { throw e; }
} Prevention
- Use only trace/debug/info/warn/error as level strings
- Whitelist/normalize env-provided CUBEJS_LOG_LEVEL values
- Remember 'warn', not 'warning'
When it happens
Trigger: Calling createLogger (or configuring the logger level) with a filterByLevel value not covered by the switch statement, e.g. 'verbose', 'LOG', 'fatal', or an undefined/empty value that reaches the default branch.
Common situations: Passing CUBEJS_LOG_LEVEL / logger config values that aren't one of the supported level strings; typo like 'warning' instead of 'warn'; programmatic logger creation in serverless deployments with a wrong default.
Related errors
- A user-defined contextToApiScopes function returns a wrong s
- Value "${input}" is not valid for ${envName}. ${description}
- Value "${input}" is not valid for ${envName}. Should be a po
- Value "${input}" is not valid for ${envName}. Should be lowe
- Value "${value}" is not valid for CUBEJS_MAX_REQUEST_SIZE. M
AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02).
Data as JSON: /api/errors/80293bbd621054c6.
Report an issue: GitHub.