diff --git a/includes/service.inc b/includes/service.inc
index 1991f04..8f59e1d 100644
--- a/includes/service.inc
+++ b/includes/service.inc
@@ -80,6 +80,8 @@ public function configurationForm(array $form, array &$form_state) {
       'retrieve_data' => FALSE,
       'highlight_data' => FALSE,
       'skip_schema_check' => FALSE,
+      'log_query' => FALSE,
+      'log_response' => FALSE,
       'solr_version' => '',
       'http_method' => 'AUTO',
       // Default to TRUE for new servers, but to FALSE for existing ones.
@@ -214,6 +216,11 @@ public function configurationForm(array $form, array &$form_state) {
       '#description' => t('When retrieving result data from the Solr server, try to highlight the search terms in the returned fulltext fields.'),
       '#default_value' => $options['highlight_data'],
     );
+    // Highlighting retrieved data only makes sense when we retrieve data.
+    // (Actually, internally it doesn't really matter. However, from a user's
+    // perspective, having to check both probably makes sense.)
+    $form['advanced']['highlight_data']['#states']['invisible']
+    [':input[name="options[form][advanced][retrieve_data]"]']['checked'] = FALSE;
     $form['advanced']['skip_schema_check'] = array(
       '#type' => 'checkbox',
       '#title' => t('Skip schema verification'),
@@ -232,12 +239,6 @@ public function configurationForm(array $form, array &$form_state) {
       ),
       '#default_value' => $options['solr_version'],
     );
-    // Highlighting retrieved data only makes sense when we retrieve data.
-    // (Actually, internally it doesn't really matter. However, from a user's
-    // perspective, having to check both probably makes sense.)
-    $form['advanced']['highlight_data']['#states']['invisible']
-        [':input[name="options[form][advanced][retrieve_data]"]']['checked'] = FALSE;
-
     $form['advanced']['http_method'] = array(
       '#type' => 'select',
       '#title' => t('HTTP method'),
@@ -249,6 +250,18 @@ public function configurationForm(array $form, array &$form_state) {
         'GET' => 'GET',
       ),
     );
+    $form['advanced']['log_query'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Log search requests'),
+      '#description' => t('Log all outgoing Solr search requests.'),
+      '#default_value' => $options['log_query'],
+    );
+    $form['advanced']['log_response'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Log search results'),
+      '#description' => t('Log all search result responses received from Solr. NOTE: This may slow down your site since all response data (including possible retrieved data) will be saved in the Drupal log.'),
+      '#default_value' => $options['log_response'],
+    );
 
     if (module_exists('search_api_autocomplete')) {
       $form['advanced']['autocomplete'] = array(
diff --git a/includes/solr_connection.inc b/includes/solr_connection.inc
index a41ce05..5e3e8f5 100644
--- a/includes/solr_connection.inc
+++ b/includes/solr_connection.inc
@@ -944,10 +944,18 @@ public function search($query = NULL, array $params = array(), $method = 'GET')
     // built-in http_build_query() doesn't give us the format Solr wants.
     $queryString = $this->httpBuildQuery($params);
 
+    if (!empty($this->options['log_query'])) {
+      watchdog('search_api_solr', 'Query: @query', array('@query' => $queryString), WATCHDOG_DEBUG);
+    }
+
     if ($method == 'GET' || $method == 'AUTO') {
       $searchUrl = $this->constructUrl(self::SEARCH_SERVLET, array(), $queryString);
       if ($method == 'GET' || strlen($searchUrl) <= variable_get('search_api_solr_http_get_max_length', 4000)) {
-        return $this->sendRawGet($searchUrl);
+        $response = $this->sendRawGet($searchUrl);
+        if (!empty($this->options['log_response'])) {
+          $this->logResponse($response);
+        }
+        return $response;
       }
     }
 
@@ -955,7 +963,28 @@ public function search($query = NULL, array $params = array(), $method = 'GET')
     $searchUrl = $this->constructUrl(self::SEARCH_SERVLET);
     $options['data'] = $queryString;
     $options['headers']['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
-    return $this->sendRawPost($searchUrl, $options);
+    $response = $this->sendRawPost($searchUrl, $options);
+
+    if (!empty($this->options['log_response'])) {
+      $this->logResponse($response);
+    }
+
+    return $response;
+  }
+
+  /**
+   * Logs a Solr response object.
+   *
+   * @param object $response
+   *   The response received from Solr.
+   */
+  protected function logResponse($response) {
+    $data = $response->code . ' ' . $response->status_message . "\n" . print_r($response->response, TRUE);
+    watchdog('search_api_solr', 'Response: <div style="white-space: pre-wrap;">@response</div>', array('@response' => $data), WATCHDOG_DEBUG);
+
+    if (!empty($response->facet_counts)) {
+      watchdog('search_api_solr', 'Facets: <div style="white-space: pre-wrap;">@facets</div>', array('@facets' => print_r($response->facet_counts, TRUE)), WATCHDOG_DEBUG);
+    }
   }
 
 }
