{"record":{"id":"d212c2a9055da100","repo":"dani-garcia/vaultwarden","slug":"failed-to-parse-global-log-level","errorCode":null,"errorMessage":"Failed to parse global log level","messagePattern":"Failed to parse global log level","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/main.rs","lineNumber":246,"sourceCode":"        |   https://github.com/dani-garcia/vaultwarden/discussions or        |\\n\\\n        |   https://vaultwarden.discourse.group/                             |\\n\\\n        | Report suspected bugs/issues in the software itself at:            |\\n\\\n        |   https://github.com/dani-garcia/vaultwarden/issues/new            |\\n\\\n        \\\\--------------------------------------------------------------------/\\n\"\n    );\n}\n\nfn init_logging() -> Result<log::LevelFilter, Error> {\n    let levels = log::LevelFilter::iter().map(|lvl| lvl.as_str().to_lowercase()).collect::<Vec<String>>().join(\"|\");\n    let log_level_rgx_str = format!(\"^({levels})((,[^,=]+=({levels}))*)$\");\n    let log_level_rgx = regex::Regex::new(&log_level_rgx_str)?;\n    let config_str = CONFIG.log_level().to_lowercase();\n\n    let (level, levels_override) = if let Some(caps) = log_level_rgx.captures(&config_str) {\n        let level = caps\n            .get(1)\n            .and_then(|m| log::LevelFilter::from_str(m.as_str()).ok())\n            .ok_or(Error::new(\"Failed to parse global log level\".to_owned(), \"\"))?;\n\n        let levels_override: Vec<(&str, log::LevelFilter)> = caps\n            .get(2)\n            .map(|m| {\n                m.as_str()\n                    .split(',')\n                    .collect::<Vec<&str>>()\n                    .into_iter()\n                    .filter_map(|s| match s.split_once('=') {\n                        Some((log, lvl_str)) => log::LevelFilter::from_str(lvl_str).ok().map(|lvl| (log, lvl)),\n                        _ => None,\n                    })\n                    .collect()\n            })\n            .ok_or(Error::new(\"Failed to parse overrides\".to_owned(), \"\"))?;\n\n        (level, levels_override)\n    } else {","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/dani-garcia/vaultwarden/blob/cc67d644f62605cb46f4d16c4a2eed1a861cc8bb/src/main.rs#L228-L264","documentation":"init_logging parses the LOG_LEVEL config into a log::LevelFilter via from_str on the regex-captured global part. This error is returned when the captured string is not a valid log level (e.g. 'verbose', 'warn' misspelled, empty).","triggerScenarios":"LOG_LEVEL set to a value matching the level regex prefix but whose first capture is not one of off/error/warn/info/debug/trace, e.g. LOG_LEVEL='verbose' or LOG_LEVEL='warning'.","commonSituations":"Users copying levels from other frameworks ('warning' instead of 'warn', 'verbose'); typos; setting LOG_LEVEL to a file path or arbitrary text.","solutions":["Set LOG_LEVEL to a valid level: off, error, warn, info, debug, or trace","Use the override format for module granularity: LOG_LEVEL=info,vaultwarden::api::icons=debug","Check for typos like 'warning' or 'verbose' in your .env / environment","Check startup logs to see the exact invalid value echoed in the follow-up format error"],"exampleFix":"// before\nLOG_LEVEL=warning\n// after\nLOG_LEVEL=warn","handlingStrategy":"validation","validationCode":"const VALID = ['off','error','warn','info','debug','trace'];\nconst lvl = process.env.LOG_LEVEL?.split(',')[0].trim().toLowerCase();\nif (lvl && !VALID.includes(lvl)) throw new Error(`Invalid LOG_LEVEL global level: ${lvl}. Use one of ${VALID.join('/')}`);","typeGuard":"function isValidLogLevel(s) { return ['off','error','warn','info','debug','trace'].includes(s.trim().toLowerCase()); }","tryCatchPattern":null,"preventionTips":["Only use Rust log crate level names in LOG_LEVEL","Keep a documented example in .env.template: LOG_LEVEL=info","Remember 'warning'->warn and 'verbose'->debug do not exist","Validate env files in CI with a lint script"],"tags":["logging","config","parsing"],"backgroundTag":"invalid-config-value","analyzedSha":"cc67d644f62605cb46f4d16c4a2eed1a861cc8bb","analyzedAt":"2026-09-19T08:28:46.370Z","contentChangedAt":"2026-09-19T08:28:46.370Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}