code: func matchLogLine(keyvals []interface{}, keyRegexes, valueRegexes []*regexp.Regexp, matchAll bool) bool {
  	all := matchAll
  	// We should be passed an aligned list of keyRegexes and valueRegexes, but since we can't error here we'll guard
  	// against a failure of the caller to pass valid arguments
  	length := len(keyRegexes)
  	if len(valueRegexes) < length {
  		length = len(valueRegexes)
  	}
  	for i := 0; i < length; i++ {
  		matched := findMatchInLogLine(keyvals, keyRegexes[i], valueRegexes[i])
  		if matchAll {
  			all = all && matched
  		} else if matched {
  			return true
  		}
  	}
  	return all
  }
docs: // matchLogLine tries to match a log line by trying to match each key value pair with each pair of key value regexes
  // if matchAll is true then matchLogLine returns true iff every key value regexes finds a match or the line or regexes
  // are empty