使用RegexInterceptor,可以使用OR运算符过滤事件,如下所示,
agent.sources.source_3.interceptors.filters.type = regex_filter
agent.sources.source_3.interceptors.filters.regex = .*type1.*|.*type2.*
agent.sources.source_3.interceptors.filters.excludeEvents = false
顺便说一下,这也是 scala/java 中正则表达式的工作方式,示例
图案
scala> import java.util.regex.Pattern;
import java.util.regex.Pattern
scala> import java.util.regex.Matcher;
import java.util.regex.Matcher
scala> val pattern = Pattern.compile(".*type1.*|.*type2.*")
pattern: java.util.regex.Pattern = .*type1.*|.*type2.*
匹配器 1
scala> val matcher = pattern.matcher("[20151010][type1][stuff]")
matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.*type1.*|.*type2.* region=0,24 lastmatch=]
scala> val matches = matcher.matches()
matches: Boolean = true
匹配器 2
scala> val matcher = pattern.matcher("[20151011][type2][stuff]")
matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.*type1.*|.*type2.* region=0,24 lastmatch=]
scala> val matches = matcher.matches()
matches: Boolean = true
匹配器 3
scala> val matcher = pattern.matcher("[20151011][type3][stuff]")
matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.*type1.*|.*type2.* region=0,24 lastmatch=]
scala> val matches = matcher.matches()
matches: Boolean = false
如果您查看他们的implementation code,他们正在使用matcher.find()
scala> val pattern = Pattern.compile(".*type1.*|.*type2.*")
pattern: java.util.regex.Pattern = .*type1.*|.*type2.*
scala> val matcher = pattern.matcher("[20151010][type1][stuff]")
matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.*type1.*|.*type2.* region=0,24 lastmatch=]
scala> val matches = matcher.find()
matches: Boolean = true