{"record":{"id":"37630a5d7fafb1a3","repo":"pinojs/pino","slug":"unknown-level-level","errorCode":null,"errorMessage":"unknown level ${level}","messagePattern":"unknown level (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"browser.js","lineNumber":190,"sourceCode":"      this._logEvent.bindings.push(newBindings)\n    }\n    // reassigning the level rebuilds the log functions so the updated\n    // bindings are prepended to subsequent log calls\n    this.level = this._level\n  }\n\n  if (transmit) logger._logEvent = createLogEventShape()\n\n  function getLevelVal () {\n    return levelToValue(this.level, this)\n  }\n\n  function getLevel () {\n    return this._level\n  }\n  function setLevel (level) {\n    if (level !== 'silent' && !this.levels.values[level]) {\n      throw Error('unknown level ' + level)\n    }\n    this._level = level\n\n    set(this, setOpts, logger, 'error') // <-- must stay first\n    set(this, setOpts, logger, 'fatal')\n    set(this, setOpts, logger, 'warn')\n    set(this, setOpts, logger, 'info')\n    set(this, setOpts, logger, 'debug')\n    set(this, setOpts, logger, 'trace')\n\n    customLevels.forEach((level) => {\n      set(this, setOpts, logger, level)\n    })\n  }\n\n  function child (setOpts, bindings, childOptions) {\n    if (!bindings) {\n      throw new Error('missing bindings for child Pino')","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/pinojs/pino/blob/5aa62305c57709ebd6f6b7c328e8830eeb29b297/browser.js#L172-L208","documentation":"The browser logger's setLevel (browser.js:190) throws when assigned a level that is not 'silent' and has no entry in logger.levels.values. Only levels registered on the logger instance (default or custom) are accepted.","triggerScenarios":"logger.level = 'verbose' or logger.setLevel('trace ') (trailing space) where 'verbose' isn't a registered pino level and no customLevels define it.","commonSituations":"Using level names from other logging libraries (winston's 'verbose'/'silly'); typos or casing issues ('TRACE'); reading the level from user config or env without validating against known levels.","solutions":["Use a valid pino level: trace, debug, info, warn, error, fatal, or silent","Register custom levels: pino({ customLevels: { verbose: 25 } })","Trim/normalize the level string before assigning: level.trim().toLowerCase()"],"exampleFix":"// before\nlogger.level = 'verbose';\n// after\nconst logger = pino({ customLevels: { verbose: 25 } });\nlogger.level = 'verbose';","handlingStrategy":"validation","validationCode":"function safeSetLevel(logger, level) {\n  const l = String(level).trim().toLowerCase();\n  if (l !== 'silent' && !(l in logger.levels.values)) {\n    throw new Error(`unknown level: ${level}`);\n  }\n  logger.level = l;\n}","typeGuard":"function isKnownLevel(logger, level) {\n  return level === 'silent' || typeof logger.levels.values[level] === 'number';\n}","tryCatchPattern":"try { logger.level = cfgLevel; } catch (e) { if (/unknown level/.test(e.message)) { logger.level = 'info'; console.warn(e.message); } else { throw e; } }","preventionTips":["Validate levels from config/env against logger.levels.values before assigning","Normalize casing/whitespace: level.trim().toLowerCase()","If using non-standard level names, define them via customLevels"],"tags":["logging","pino","browser","levels","validation"],"backgroundTag":"invalid-log-level","analyzedSha":"5aa62305c57709ebd6f6b7c328e8830eeb29b297","analyzedAt":"2026-09-02T22:05:21.418Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}