diff --git a/mailchimp_ecommerce.module b/mailchimp_ecommerce.module
index 899f5b9..9370c52 100644
--- a/mailchimp_ecommerce.module
+++ b/mailchimp_ecommerce.module
@@ -90,19 +90,3 @@ function mailchimp_ecommerce_get_list_id() {
 function mailchimp_ecommerce_get_currency_codes() {
   return \Drupal::service('mailchimp_ecommerce.helper')->getCurrencyCodes();
 }
-
-/**
- * Logs an error message using watchdog, if enabled.
- *
- * @todo This function cannot run, the function "watchdog" is never defined.
- *
- * @param string $message
- *   The error message to log.
- */
-function mailchimp_ecommerce_log_error_message($message) {
-  if (function_exists('watchdog')) {
-    \Drupal::logger('mailchimp_ecommerce')->error('%message', array(
-      '%message' => $message,
-    ));
-  }
-}
diff --git a/mailchimp_ecommerce.services.yml b/mailchimp_ecommerce.services.yml
index 4b7a237..4bf422c 100644
--- a/mailchimp_ecommerce.services.yml
+++ b/mailchimp_ecommerce.services.yml
@@ -6,16 +6,19 @@ services:
 
   mailchimp_ecommerce.customer_handler:
     class: '\Drupal\mailchimp_ecommerce\CustomerHandler'
-    arguments: ['@mailchimp_ecommerce.database']
+    arguments: ['@mailchimp_ecommerce.database', '@logger.factory']
 
   mailchimp_ecommerce.order_handler:
     class: '\Drupal\mailchimp_ecommerce\OrderHandler'
+    arguments: ['@logger.factory']
 
   mailchimp_ecommerce.product_handler:
     class: '\Drupal\mailchimp_ecommerce\ProductHandler'
+    arguments: ['@logger.factory']
 
   mailchimp_ecommerce.store_handler:
     class: '\Drupal\mailchimp_ecommerce\StoreHandler'
+    arguments: ['@logger.factory']
 
   mailchimp_ecommerce.database:
     class: Drupal\Core\Database\Connection
@@ -25,4 +28,8 @@ services:
   mailchimp_ecommerce.helper:
     class: '\Drupal\mailchimp_ecommerce\MailchimpEcommerceHelper'
     factory: ['@class_resolver', 'getInstanceFromDefinition']
-    arguments: ['\Drupal\mailchimp_ecommerce\MailchimpEcommerceHelper']
+    arguments: ['\Drupal\mailchimp_ecommerce\MailchimpEcommerceHelper', '@logger.factory']
+
+  logger.channel.mailchimp_ecommerce:
+    parent: logger.channel_base
+    arguments: ['mailchimp_ecommerce']
diff --git a/src/CartHandler.php b/src/CartHandler.php
index faf517e..3b4122f 100644
--- a/src/CartHandler.php
+++ b/src/CartHandler.php
@@ -3,6 +3,7 @@
 namespace Drupal\mailchimp_ecommerce;
 
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Messenger\MessengerInterface;
 use Mailchimp\MailchimpEcommerce;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -33,17 +34,26 @@ class CartHandler implements CartHandlerInterface, ContainerInjectionInterface {
    */
   protected $messenger;
 
-  public function __construct(MailchimpEcommerce $mc_ecommerce, MailchimpEcommerceHelper $helper, MessengerInterface $messenger) {
+  /**
+   * The logger factory.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
+   */
+  protected $logger;
+
+  public function __construct(MailchimpEcommerce $mc_ecommerce, MailchimpEcommerceHelper $helper, MessengerInterface $messenger, LoggerChannelFactoryInterface $logger_factory) {
     $this->mcEcommerce = $mc_ecommerce;
     $this->helper = $helper;
     $this->messenger = $messenger;
+    $this->logger = $logger_factory->get('mailchimp_ecommerce');
   }
 
   public static function create(ContainerInterface $container) {
     return new static(
       \mailchimp_get_api_object('MailchimpEcommerce'),
       $container->get('mailchimp_ecommerce.helper'),
-      $container->get('messenger')
+      $container->get('messenger'),
+      $container->get('logger.factory')
     );
   }
 
@@ -80,7 +90,7 @@ class CartHandler implements CartHandlerInterface, ContainerInjectionInterface {
       }
     }
     catch (\Exception $e) {
-      //mailchimp_ecommerce_log_error_message('Unable to get the requested cart: ' . $e->getMessage());
+      $this->logger->error('Unable to get the requested cart: %message', ['%message' => $e->getMessage()]);
       $this->messenger->addError($e->getMessage());
     }
 
@@ -126,7 +136,7 @@ class CartHandler implements CartHandlerInterface, ContainerInjectionInterface {
       }
     }
     catch (\Exception $e) {
-      //mailchimp_ecommerce_log_error_message('Unable to add a cart: ' . $e->getMessage());
+      $this->logger->error('Unable to add a cart: %message', ['%message' => $e->getMessage()]);
       $this->messenger->addError($e->getMessage());
     }
   }
@@ -147,7 +157,7 @@ class CartHandler implements CartHandlerInterface, ContainerInjectionInterface {
         // Cart doesn't exist; no need to log an error.
       }
       else {
-        //mailchimp_ecommerce_log_error_message('Unable to delete a cart: ' . $e->getMessage());
+        $this->logger->error('Unable to delete a cart: %message', ['%message' => $e->getMessage()]);
         $this->messenger->addError($e->getMessage());
       }
     }
@@ -166,7 +176,7 @@ class CartHandler implements CartHandlerInterface, ContainerInjectionInterface {
       $this->mcEcommerce->addCartLine($store_id, $cart_id, $line_id, $product);
     }
     catch (\Exception $e) {
-      //mailchimp_ecommerce_log_error_message('Unable to add a cart line: ' . $e->getMessage());
+      $this->logger->error('Unable to add a cart line: %message', ['%message' => $e->getMessage()]);
       $this->messenger->addError($e->getMessage());
     }
   }
@@ -188,7 +198,7 @@ class CartHandler implements CartHandlerInterface, ContainerInjectionInterface {
         $this->mcEcommerce->addCartLine($store_id, $cart_id, $line_id, $product);
       }
       else {
-        //mailchimp_ecommerce_log_error_message('Unable to update a cart line: ' . $e->getMessage());
+        $this->logger->error('Unable to update a cart line: %message', ['%message' => $e->getMessage()]);
         $this->messenger->addError($e->getMessage());
       }
     }
@@ -207,7 +217,7 @@ class CartHandler implements CartHandlerInterface, ContainerInjectionInterface {
       $this->mcEcommerce->deleteCartLine($store_id, $cart_id, $line_id);
     }
     catch (\Exception $e) {
-      //mailchimp_ecommerce_log_error_message('Unable to delete a cart line: ' . $e->getMessage());
+      $this->logger->error('Unable to delete a cart line: %message', ['%message' => $e->getMessage()]);
       $this->messenger->addError($e->getMessage());
     }
   }
diff --git a/src/CustomerHandler.php b/src/CustomerHandler.php
index 49900bd..0872662 100644
--- a/src/CustomerHandler.php
+++ b/src/CustomerHandler.php
@@ -3,6 +3,7 @@
 namespace Drupal\mailchimp_ecommerce;
 
 use Drupal\Core\Database\Connection;
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 
 /**
  * Customer handler.
@@ -17,13 +18,21 @@ class CustomerHandler implements CustomerHandlerInterface {
   private $database;
 
   /**
+   * The logger factory.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
+   */
+  protected $logger;
+
+  /**
    * CustomerHandler constructor.
    *
    * @param \Drupal\Core\Database\Connection $database
    *   The Order Handler.
    */
-  public function __construct(Connection $database) {
+  public function __construct(Connection $database, LoggerChannelFactoryInterface $logger_factory) {
     $this->database = $database;
+    $this->logger = $logger_factory;
   }
 
   /**
@@ -46,7 +55,7 @@ class CustomerHandler implements CustomerHandlerInterface {
         // Customer doesn't exist in the store; no need to log an error.
       }
       else {
-        mailchimp_ecommerce_log_error_message('Unable to delete a customer: ' . $e->getMessage());
+        $this->logger->error('Unable to delete a customer: %message', ['%message' => $e->getMessage()]);
         drupal_set_message($e->getMessage(), 'error');
       }
     }
@@ -85,7 +94,7 @@ class CustomerHandler implements CustomerHandlerInterface {
       }
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to add a customer: ' . $e->getMessage());
+      $this->logger->error('Unable to add a customer: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
@@ -105,7 +114,7 @@ class CustomerHandler implements CustomerHandlerInterface {
       $mc_ecommerce->deleteCustomer($store_id, $customer_id);
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to delete a customer: ' . $e->getMessage());
+      $this->logger->error('Unable to delete a customer: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
diff --git a/src/MailchimpEcommerceHelper.php b/src/MailchimpEcommerceHelper.php
index e1c29ab..8e80650 100644
--- a/src/MailchimpEcommerceHelper.php
+++ b/src/MailchimpEcommerceHelper.php
@@ -4,6 +4,7 @@ namespace Drupal\mailchimp_ecommerce;
 
 use Drupal\Core\Config\ImmutableConfig;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Messenger\MessengerInterface;
 use Mailchimp\MailchimpCampaigns;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -45,6 +46,13 @@ class MailchimpEcommerceHelper implements ContainerInjectionInterface {
   protected $config;
 
   /**
+   * The logger channel factory.
+   *
+   * @var \Drupal\Logger\LoggerChannelFactoryInterface
+   */
+  protected $logger;
+
+  /**
    * MailchimpEcommerceHelper constructor.
    *
    * @param \Mailchimp\MailchimpCampaigns $mc_campaigns
@@ -56,11 +64,12 @@ class MailchimpEcommerceHelper implements ContainerInjectionInterface {
    * @param \Drupal\Core\Config\ImmutableConfig $config
    *   The mailchimp_ecommerce config.
    */
-  public function __construct(MailchimpCampaigns $mc_campaigns, MessengerInterface $messenger, Request $request, ImmutableConfig $config) {
+  public function __construct(MailchimpCampaigns $mc_campaigns, MessengerInterface $messenger, Request $request, ImmutableConfig $config, LoggerChannelFactoryInterface $logger_factory) {
     $this->mcCampaigns = $mc_campaigns;
     $this->messenger = $messenger;
     $this->request = $request;
     $this->config = $config;
+    $this->logger = $logger_factory->get('mailchimp_ecommerce');
   }
 
   /**
@@ -71,7 +80,8 @@ class MailchimpEcommerceHelper implements ContainerInjectionInterface {
       \mailchimp_get_api_object('MailchimpCampaigns'),
       $container->get('messenger'),
       $container->get('request_stack')->getCurrentRequest(),
-      $container->get('config.factory')->get('mailchimp_ecommerce.settings')
+      $container->get('config.factory')->get('mailchimp_ecommerce.settings'),
+      $container->get('logger.factory')
     );
   }
 
@@ -110,7 +120,7 @@ class MailchimpEcommerceHelper implements ContainerInjectionInterface {
         // Campaign doesn't exist; no need to log an error.
       }
       else {
-        /* mailchimp_ecommerce_log_error_message('Unable to get campaign: ' . $e->getMessage()); */
+        $this->logger->error('Unable to get campaign: %message', ['%message' => $e->getMessage()]);
         $this->messenger->addError($e->getMessage());
       }
     }
diff --git a/src/OrderHandler.php b/src/OrderHandler.php
index a5cdc13..9ff51c3 100644
--- a/src/OrderHandler.php
+++ b/src/OrderHandler.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\mailchimp_ecommerce;
 
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\commerce_order\Entity\Order;
 use Drupal\commerce_order\Entity\OrderItem;
 
@@ -11,6 +12,20 @@ use Drupal\commerce_order\Entity\OrderItem;
 class OrderHandler implements OrderHandlerInterface {
 
   /**
+   * Drupal\Core\Logger\LoggerChannelFactoryInterface definition.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
+   */
+  protected $logger;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(LoggerChannelFactoryInterface $logger_factory) {
+    $this->logger = $logger_factory->get('mailchimp_ecommerce');
+  }
+
+  /**
    * @inheritdoc
    */
   public function getOrder($order_id) {
@@ -26,7 +41,7 @@ class OrderHandler implements OrderHandlerInterface {
       return $order;
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to get order: ' . $e->getMessage());
+      $this->logger->error('Unable to get order: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
 
@@ -60,7 +75,7 @@ class OrderHandler implements OrderHandlerInterface {
       $mc_ecommerce->addOrder($store_id, $order_id, $customer, $order);
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to add an order: ' . $e->getMessage());
+      $this->logger->error('Unable to add an order: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
@@ -80,7 +95,7 @@ class OrderHandler implements OrderHandlerInterface {
       $mc_ecommerce->updateOrder($store_id, $order_id, $order);
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to update an order: ' . $e->getMessage());
+      $this->logger->error('Unable to update an order: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
diff --git a/src/ProductHandler.php b/src/ProductHandler.php
index 4c1c6c6..a5a4a20 100644
--- a/src/ProductHandler.php
+++ b/src/ProductHandler.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\mailchimp_ecommerce;
 
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\node\Entity\Node;
 use Drupal\commerce_product\Entity\Product;
 use Drupal\commerce_product\Entity\ProductVariation;
@@ -12,6 +13,20 @@ use Drupal\commerce_product\Entity\ProductVariation;
 class ProductHandler implements ProductHandlerInterface {
 
   /**
+   * Drupal\Core\Logger\LoggerChannelFactoryInterface definition.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
+   */
+  protected $logger;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(LoggerChannelFactoryInterface $logger_factory) {
+    $this->logger = $logger_factory->get('mailchimp_ecommerce');
+  }
+
+  /**
    * @inheritdoc
    */
   public function addProduct($product_id, $title, $url, $image_url, $description, $type, $variants) {
@@ -34,7 +49,7 @@ class ProductHandler implements ProductHandlerInterface {
     catch (\Exception $e) {
 
       //TODO: If add fails with product exists error code, run an update here.
-      mailchimp_ecommerce_log_error_message('Unable to add product: ' . $e->getMessage());
+      $this->logger->error($e->getMessage());
       drupal_set_message($e->getMessage(), 'error');
     }
   }
@@ -75,7 +90,7 @@ class ProductHandler implements ProductHandlerInterface {
       }
       else {
         // An actual error occurred; pass on the exception.
-        mailchimp_ecommerce_log_error_message('Unable to update product: ' . $e->getMessage());
+        $this->logger->error('Unable to update product: %message', ['%message' => $e->getMessage()]);
         drupal_set_message($e->getMessage(), 'error');
       }
     }
@@ -96,7 +111,7 @@ class ProductHandler implements ProductHandlerInterface {
       $mc_ecommerce->deleteProduct($store_id, $product_id);
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to delete product: ' . $e->getMessage());
+      $this->logger->error('Unable to delete product: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
@@ -124,7 +139,7 @@ class ProductHandler implements ProductHandlerInterface {
       ]);
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to add product variant: ' . $e->getMessage());
+      $this->logger->error('Unable to add product variant: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
@@ -152,7 +167,7 @@ class ProductHandler implements ProductHandlerInterface {
       }
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to get product variant: ' . $e->getMessage());
+      $this->logger->error('Unable to get product variant: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
 
@@ -229,7 +244,7 @@ class ProductHandler implements ProductHandlerInterface {
       }
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to delete product variant: ' . $e->getMessage());
+      $this->logger->error('Unable to delete product variant: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
diff --git a/src/StoreHandler.php b/src/StoreHandler.php
index 8bacb7c..d8a3ad3 100644
--- a/src/StoreHandler.php
+++ b/src/StoreHandler.php
@@ -2,12 +2,28 @@
 
 namespace Drupal\mailchimp_ecommerce;
 
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
+
 /**
  * Store handler.
  */
 class StoreHandler implements StoreHandlerInterface {
 
   /**
+   * Drupal\Core\Logger\LoggerChannelFactoryInterface definition.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
+   */
+  protected $logger;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(LoggerChannelFactoryInterface $logger_factory) {
+    $this->logger = $logger_factory->get('mailchimp_ecommerce');
+  }
+
+  /**
    * @inheritdoc
    */
   public function getStore($store_id) {
@@ -22,7 +38,7 @@ class StoreHandler implements StoreHandlerInterface {
         // Store doesn't exist; no need to log an error.
       }
       else {
-        mailchimp_ecommerce_log_error_message('Unable to get store: ' . $e->getMessage());
+        $this->logger->error('Unable to get store: %message', ['%message' => $e->getMessage()]);
         drupal_set_message($e->getMessage(), 'error');
       }
     }
@@ -47,7 +63,7 @@ class StoreHandler implements StoreHandlerInterface {
       \Drupal::moduleHandler()->invokeAll('mailchimp_ecommerce_add_store', [$mc_store]);
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to add a new store: ' . $e->getMessage());
+      $this->logger->error('Unable to add a new store: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
@@ -67,7 +83,7 @@ class StoreHandler implements StoreHandlerInterface {
       $mc_ecommerce->updateStore($store_id, $name, $currency_code, $parameters);
     }
     catch (\Exception $e) {
-      mailchimp_ecommerce_log_error_message('Unable to update a store: ' . $e->getMessage());
+      $this->logger->error('Unable to update a store: %message', ['%message' => $e->getMessage()]);
       drupal_set_message($e->getMessage(), 'error');
     }
   }
diff --git a/tests/src/Unit/CartHandlerTest.php b/tests/src/Unit/CartHandlerTest.php
index 53a3641..d26771e 100644
--- a/tests/src/Unit/CartHandlerTest.php
+++ b/tests/src/Unit/CartHandlerTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\mailchimp_ecommerce\Unit;
 
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\mailchimp_ecommerce\CartHandler;
 use Drupal\mailchimp_ecommerce\MailchimpEcommerceHelper;
@@ -58,6 +59,13 @@ class CartHandlerTest extends UnitTestCase {
   protected $errors;
 
   /**
+   * A mock of the logger channel factory.
+   *
+   * @var \PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $logger;
+
+  /**
    * {@inheritdoc}
    */
   protected function setUp() {
@@ -65,12 +73,16 @@ class CartHandlerTest extends UnitTestCase {
     $this->mcEcommerce = $this->createMock(MailchimpEcommerce::class);
     $this->helper = $this->createMock(MailchimpEcommerceHelper::class);
     $this->messenger = $this->createMock(MessengerInterface::class);
-    $this->handler = new CartHandler($this->mcEcommerce, $this->helper, $this->messenger);
+    $this->logger = $this->createMock(LoggerChannelFactoryInterface::class);
+    $this->handler = new CartHandler($this->mcEcommerce, $this->helper, $this->messenger, $this->logger);
 
     $this->errors = [];
     $this->messenger->method('addError')->willReturnCallback(function ($error) {
       $this->errors[] = $error;
     });
+    $this->logger->method('error')->willReturnCallback(function ($error) {
+      $this->errors[] = $error;
+    });
   }
 
   /**
