I'm ingesting several log sources on one Input and have 4 Extractors chained to it. From the behavior I've observed, if the extractor fails to match, it simply passes on to the next Extractor. It's only an attempt, not a force.
For example, my extractors:
- Decode JSON (input comes in as JSON, this flattens into fields)
- Standard App Logging Format (we use an internal standard)
- Error Code For App (if ERROR, our apps use a custom Example_Error=Something field)
- Mac OS X Hostname
When an app log without an error comes in, it:
- Gets decoded from JSON
- Matches the format via grok with RegEx
- Pass (no "Example_Error=" field)
- Pass (no match against Mac OS X logs)
And when a Mac OS X system log comes in:
- Gets decoded from JSON
- Pass (Doesn't match the app logging format)
- Pass (Doesn't match the error code field )
- Gets hostname extracted
With some planning and good sets of groks, you can get this to work with lots of Extractors based on the expected formatting of your logs. Of particular use for you might also be the "Only attempt extraction if field contains (string / regular expression)" option within the Extractors.