diff --git a/better_statistics.api.php b/better_statistics.api.php
index 0b513b6..624be5f 100644
--- a/better_statistics.api.php
+++ b/better_statistics.api.php
@@ -199,5 +199,38 @@ function hook_better_statistics_prelog() {
 }
 
 /**
+ * Log access statistics.
+ *
+ * This hook allows modules to route access statistics to custom destinations in
+ * custom formats such as syslog, flat files, csv, etc.
+ *
+ * Note that Better Statistics logs access data to the Drupal {accesslog} table
+ * by default. You may wish to disable this functionality by instructing users
+ * to add a variable setting in settings.php, or manually doing so yourself by
+ * setting the global variable in hook_better_statistics_prelog().
+ *
+ * The variable in question is "statistics_log_to_db."
+ *
+ * @param $data
+ *   An array of access statistics data keyed by field name.
+ */
+function hook_better_statistics_log($data) {
+  // Send data to Google Analytics using a hypothetical PHP class "fooGA."
+  require_once('path/to/foo_ga.class.php');
+  $ga = new fooGA();
+  $ga->setAccountId("UA-1234567-8");
+  $ga->setHostName($GLOBALS['base_root']);
+
+  $n = 1;
+  foreach ($data as $name => $value) {
+    $ga->setCustomVar($n, $name, $value, GA_SCOPE_PAGE_LEVEL);
+    $n++;
+  }
+
+  // Submit the data to GA via a page view call.
+  $ga->setPageView(request_path());
+}
+
+/**
  * @}
  */
diff --git a/better_statistics.install b/better_statistics.install
index a617eec..16ccaa9 100644
--- a/better_statistics.install
+++ b/better_statistics.install
@@ -58,4 +58,5 @@ function better_statistics_uninstall() {
   variable_del('statistics_access_log_restrictions_page');
   variable_del('statistics_access_log_restrictions_pages');
   variable_del('statistics_access_log_restrictions_roles');
+  variable_del('statistics_log_to_db');
 }
diff --git a/better_statistics.module b/better_statistics.module
index ac1b151..36be964 100644
--- a/better_statistics.module
+++ b/better_statistics.module
@@ -92,19 +92,8 @@ function better_statistics_exit() {
       // Get all declared fields and their computed values.
       $fields = better_statistics_get_fields_data();
 
-      // Now that we have data, try to insert it.
-      try {
-        db_insert('accesslog')->fields($fields)->execute();
-      }
-      catch (Exception $e) {
-        // At least log core fields.
-        $defaults = better_statistics_get_default_fields();
-        $core_fields = array_intersect_key($fields, $defaults);
-        db_insert('accesslog')->fields($core_fields)->execute();
-
-        // Log the error.
-        watchdog('better statistics', 'There was an error collecting statistics data:<br /><br />@error', array('@error' => $e->getMessage()), WATCHDOG_ERROR);
-      }
+      // Allow modules to log statistics data.
+      module_invoke_all('better_statistics_log', $fields);
     }
   }
 
diff --git a/better_statistics.statistics.inc b/better_statistics.statistics.inc
index a06798a..cf4a286 100644
--- a/better_statistics.statistics.inc
+++ b/better_statistics.statistics.inc
@@ -176,3 +176,28 @@ function better_statistics_better_statistics_prelog() {
     }
   }
 }
+
+
+/**
+ * Implements hook_better_statistics_log().
+ *
+ * Logs Statistics data in the {accesslog} table.
+ */
+function better_statistics_better_statistics_log($data) {
+  // Check that we're meant to log Statistics to the DB.
+  if (variable_get('statistics_log_to_db', TRUE)) {
+    // Now that we have data, try to insert it.
+    try {
+      db_insert('accesslog')->fields($data)->execute();
+    }
+    catch (Exception $e) {
+      // At least log core fields.
+      $defaults = better_statistics_get_default_fields();
+      $core_fields = array_intersect_key($fields, $defaults);
+      db_insert('accesslog')->fields($core_fields)->execute();
+
+      // Log the error.
+      watchdog('better statistics', 'There was an error collecting statistics data:<br /><br />@error', array('@error' => $e->getMessage()), WATCHDOG_ERROR);
+    }
+  }
+}
