{"record":{"id":"9fc2bd5d3c562160","repo":"vectordotdev/vector","slug":"invalid-glob-patterns","errorCode":null,"errorMessage":"invalid glob patterns","messagePattern":"invalid glob patterns","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/sources/file.rs","lineNumber":513,"sourceCode":"    let ignore_before = calculate_ignore_before(config.ignore_older_secs);\n    let glob_minimum_cooldown = config.glob_minimum_cooldown_ms;\n    let (ignore_checkpoints, read_from) = reconcile_position_options(\n        config.start_at_beginning,\n        config.ignore_checkpoints,\n        Some(config.read_from),\n    );\n\n    let emitter = FileSourceInternalEventsEmitter {\n        include_file_metric_tag: config.internal_metrics.include_file_tag,\n    };\n\n    let paths_provider = Glob::new(\n        &config.include,\n        &exclude_patterns,\n        MatchOptions::default(),\n        emitter.clone(),\n    )\n    .expect(\"invalid glob patterns\");\n\n    let encoding_charset = config.encoding.clone().map(|e| e.charset);\n\n    // if file encoding is specified, need to convert the line delimiter (present as utf8)\n    // to the specified encoding, so that delimiter-based line splitting can work properly\n    let line_delimiter_as_bytes = match encoding_charset {\n        Some(e) => Encoder::new(e).encode_from_utf8(&config.line_delimiter),\n        None => Bytes::from(config.line_delimiter.clone()),\n    };\n\n    let checkpointer = Checkpointer::new(&data_dir);\n    let strategy = config.fingerprint.clone().into();\n\n    let file_server = FileServer {\n        paths_provider,\n        max_read_bytes: config.max_read_bytes,\n        ignore_checkpoints,\n        read_from,","sourceCodeStart":495,"sourceCodeEnd":531,"githubUrl":"https://github.com/vectordotdev/vector/blob/bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013/src/sources/file.rs#L495-L531","documentation":"The file source's file_source constructor builds a glob-based paths provider over include/exclude patterns and panics with \"invalid glob patterns\" if any pattern fails to compile as a glob. This is a configuration error surfaced as a panic during source build.","triggerScenarios":"Configuring a file source whose `include` or `exclude` entries contain malformed glob syntax (e.g. unmatched `[`, invalid `**` placement) so glob::Pattern::new fails when Glob::new iterates them.","commonSituations":"YAML quoting issues leaving raw brackets in patterns; users writing regex-style patterns (e.g. \".*\\\\.log$\") instead of globs; templated paths substituting empty or broken values.","solutions":["Fix the include/exclude glob patterns to valid glob syntax (e.g. /var/log/**/*.log).","Test each pattern with a glob validator (or glob::Pattern::new) before deploying.","Quote patterns in YAML so special characters aren't mangled, and ensure wildcards are glob-style, not regex."],"exampleFix":"# before\ninclude:\n  - \"/var/log/[app/*.log\"\n# after\ninclude:\n  - \"/var/log/app/*.log\"","handlingStrategy":"validation","validationCode":"for p in include.iter().chain(exclude.iter()) {\n    if glob::Pattern::new(p).is_err() {\n        eprintln!(\"invalid glob pattern: {}\", p);\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run `vector validate` before deploying file source configs.","Use glob (not regex) syntax: *, **, ?, [abc].","Quote patterns in YAML to protect special characters.","Verify templated paths resolve to non-empty strings."],"tags":["rust","panic","glob","config","file-source"],"backgroundTag":"invalid-regex-pattern","analyzedSha":"bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013","analyzedAt":"2026-09-16T02:53:35.741Z","contentChangedAt":"2026-09-16T02:53:35.741Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}