{"record":{"id":"80293bbd621054c6","repo":"cube-js/cube","slug":"invalid-log-level-filterbylevel","errorCode":null,"errorMessage":"Invalid log level: ${filterByLevel}","messagePattern":"Invalid log level: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/cubejs-server-core/src/core/logger.ts","lineNumber":179,"sourceCode":"        logMessage();\n        break;\n      }\n    }\n  }\n};\n\nexport const createLogger = (production: boolean, filterByLevel: LogLevel = 'info'): LoggerFn => {\n  switch (filterByLevel.toLowerCase()) {\n    case 'trace':\n    case 'info':\n    case 'warn':\n    case 'error':\n      break;\n    // not used, but let's allow\n    case 'debug':\n      break;\n    default:\n      throw new Error(`Invalid log level: ${filterByLevel}`);\n  }\n\n  if (production) {\n    return prodLogger(filterByLevel);\n  } else {\n    return devLogger(filterByLevel);\n  }\n};\n","sourceCodeStart":161,"sourceCodeEnd":188,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-server-core/src/core/logger.ts#L161-L188","documentation":"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: ...'.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nconst logger = createLogger('warning');\n// after\nconst logger = createLogger('warn');","handlingStrategy":"validation","validationCode":"const LEVELS = ['trace','debug','info','warn','error'];\nfunction safeLevel(level) {\n  return LEVELS.includes(level) ? level : 'info';\n}","typeGuard":"const isValidLogLevel = (l: unknown): l is 'trace'|'debug'|'info'|'warn'|'error' =>\n  typeof l === 'string' && ['trace','debug','info','warn','error'].includes(l);","tryCatchPattern":"let logger;\ntry {\n  logger = createLogger(level);\n} catch (e) {\n  if (e.message.startsWith('Invalid log level:')) {\n    logger = createLogger('info');\n  } else { throw e; }\n}","preventionTips":["Use only trace/debug/info/warn/error as level strings","Whitelist/normalize env-provided CUBEJS_LOG_LEVEL values","Remember 'warn', not 'warning'"],"tags":["logging","configuration","validation"],"backgroundTag":"invalid-log-level","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}