{"record":{"id":"604f41247e6f9b37","repo":"risingwavelabs/risingwave","slug":"failed-to-parse-rust-log","errorCode":null,"errorMessage":"failed to parse `RUST_LOG`","messagePattern":"failed to parse `RUST_LOG`","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src/utils/runtime/src/logger.rs","lineNumber":312,"sourceCode":"                    Level::DEBUG\n                } else {\n                    Level::INFO\n                }\n            }\n        };\n        filter = filter.with_default(default_level);\n\n        // Overrides from settings.\n        filter = filter.with_targets(settings.targets);\n        if let Some(default_level) = settings.default_level {\n            filter = filter.with_default(default_level);\n        }\n\n        // Overrides from env var.\n        if let Ok(rust_log) = std::env::var(EnvFilter::DEFAULT_ENV)\n            && !rust_log.is_empty()\n        {\n            let rust_log_targets: Targets = rust_log.parse().expect(\"failed to parse `RUST_LOG`\");\n            if let Some(default_level) = rust_log_targets.default_level() {\n                filter = filter.with_default(default_level);\n            }\n            filter = filter.with_targets(rust_log_targets)\n        };\n\n        filter\n    };\n\n    let mut layers = vec![];\n\n    // fmt layer (formatting and logging to `stdout` or `stderr`)\n    {\n        let fmt_layer = tracing_subscriber::fmt::layer()\n            .with_thread_names(settings.with_thread_name)\n            .with_timer(default_timer.clone())\n            .with_ansi(settings.colorful)\n            .with_writer(move || {","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/utils/runtime/src/logger.rs#L294-L330","documentation":"init_risingwave_logger reads RUST_LOG and parses it with tracing_subscriber's `Targets` filter; `.expect(\"failed to parse `RUST_LOG`\")` panics when the string is not a valid directive list. Valid syntax is comma-separated `target=level` pairs like `info,rw_stream=debug,tower=warn`.","triggerScenarios":"RUST_LOG set (and non-empty) with invalid directives — e.g. `RUST_LOG=trace,` malformed level names (`RUST_LOG=infos`), missing level (`rw=dd`), stray characters, or invalid target syntax.","commonSituations":"Typos in level names (verbose, warnning); pasting regex or log4j-style patterns; commas/semicolons mix-ups; invalid module paths; users attempting per-crate filters with unsupported syntax.","solutions":["Fix RUST_LOG to valid directive syntax, e.g. RUST_LOG=info,risingwave_stream=debug.","Use only valid level names: error, warn, info, debug, trace (or plain module filter without level).","Unset RUST_LOG to fall back to the built-in default filter.","Test the filter in a small Rust snippet using Targets::from_str before deploying."],"exampleFix":"// before (invalid directive)\nRUST_LOG=verbose,rw_stream=debg\n// after\nRUST_LOG=info,rw_stream=debug","handlingStrategy":"validation","validationCode":"// Validate RUST_LOG syntax before launching\nif let Ok(v) = std::env::var(\"RUST_LOG\") {\n    let valid_levels = [\"error\", \"warn\", \"info\", \"debug\", \"trace\"];\n    for directive in v.split(',') {\n        let level = directive.rsplit('=').next().unwrap_or(directive);\n        assert!(\n            directive.is_empty() || valid_levels.contains(&level) || !level.contains(|c: char| c.is_whitespace()),\n            \"invalid RUST_LOG directive: {directive}\"\n        );\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prefer simple forms like RUST_LOG=info or RUST_LOG=info,crate=debug.","Test the directive locally with a trivial tracing example before shipping.","Leave RUST_LOG unset and use config-file log levels when unsure."],"tags":["rust","logging","tracing","env-var","parsing"],"backgroundTag":"invalid-env-var-value","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}