diff --git a/linkchecker.module b/linkchecker.module
index b0dd137..6a8d4a3 100644
--- a/linkchecker.module
+++ b/linkchecker.module
@@ -10,7 +10,6 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Logger\RfcLogLevel;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\field\FieldConfigInterface;
 use Drupal\filter\Entity\FilterFormat;
@@ -66,47 +65,6 @@ function linkchecker_help($route_name, RouteMatchInterface $route_match) {
   }
 }
 
-/**
- * Conditionally logs a system message.
- *
- * @param $type
- *   The category to which this message belongs. Can be any string, but the
- *   general practice is to use the name of the module calling watchdog().
- * @param $message
- *   The message to store in the log. Keep $message translatable
- *   by not concatenating dynamic values into it! Variables in the
- *   message should be added by using placeholder strings alongside
- *   the variables argument to declare the value of the placeholders.
- *   See t() for documentation on how $message and $variables interact.
- * @param $variables
- *   Array of variables to replace in the message on display or
- *   NULL if message is already translated or not possible to
- *   translate.
- * @param $severity
- *   The severity of the message; one of the following values as defined in
- * @param $link
- *   A link to associate with the message.
- *
- * @link http://www.faqs.org/rfcs/rfc3164.html RFC 3164: @endlink
- *   - WATCHDOG_EMERGENCY: Emergency, system is unusable.
- *   - RfcLogLevel::ALERT: Alert, action must be taken immediately.
- *   - RfcLogLevel::CRITICAL: Critical conditions.
- *   - WATCHDOG_ERROR: Error conditions.
- *   - WATCHDOG_WARNING: Warning conditions.
- *   - RfcLogLevel::NOTICE: (default) Normal but significant conditions.
- *   - WATCHDOG_INFO: Informational messages.
- *   - WATCHDOG_DEBUG: Debug-level messages.
- * @see watchdog_severity_levels()
- * @see watchdog()
- */
-function linkchecker_watchdog_log($type, $message, $variables = [], $severity = RfcLogLevel::NOTICE, $link = NULL) {
-  // @FIXME: $link is missing, could be in $variables.
-  if ($severity <= \Drupal::config('linkchecker.settings')->get('logging.level')) {
-    $logger = \Drupal::logger($type);
-    $logger->log($severity, $message, $variables);
-  }
-}
-
 /**
  * Run perodically via cron and delete all links without a references.
  *
diff --git a/linkchecker.services.yml b/linkchecker.services.yml
index 556b6d2..4cd1be5 100644
--- a/linkchecker.services.yml
+++ b/linkchecker.services.yml
@@ -1,8 +1,8 @@
 services:
   # Linkchecker Module logs
   logger.channel.linkchecker:
-    parent: 'logger.channel_base'
-    arguments: ['linkchecker']
+    class: Drupal\linkchecker\Logger\LinkCheckerLogger
+    arguments: ['linkchecker', '@config.factory']
 
   linkchecker.extractor:
     class: Drupal\linkchecker\LinkExtractorService
@@ -34,6 +34,7 @@ services:
       - '@datetime.time'
       - '@queue'
       - '@plugin.manager.link_status_handler'
+      - '@logger.channel.linkchecker'
 
   plugin.manager.link_status_handler:
     class: Drupal\linkchecker\Plugin\LinkStatusHandlerManager
diff --git a/src/LinkCheckerService.php b/src/LinkCheckerService.php
index 80d4097..29adf78 100644
--- a/src/LinkCheckerService.php
+++ b/src/LinkCheckerService.php
@@ -6,7 +6,7 @@ use Drupal\Component\Datetime\TimeInterface;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Link;
-use Drupal\Core\Logger\RfcLogLevel;
+use Drupal\Core\Logger\LoggerChannelInterface;
 use Drupal\Core\Queue\QueueFactory;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\Url;
@@ -71,16 +71,24 @@ class LinkCheckerService {
    */
   protected $statusHandlerManager;
 
+  /**
+   * The linkchecker logger channel.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelInterface
+   */
+  protected $logger;
+
   /**
    * Constructs a new LinkCheckerService object.
    */
-  public function __construct(EntityTypeManagerInterface $entityTypeManager, ConfigFactory $config, Client $httpClient, TimeInterface $time, QueueFactory $queueFactory, LinkStatusHandlerManager $statusHandlerManager) {
+  public function __construct(EntityTypeManagerInterface $entityTypeManager, ConfigFactory $config, Client $httpClient, TimeInterface $time, QueueFactory $queueFactory, LinkStatusHandlerManager $statusHandlerManager, LoggerChannelInterface $logger) {
     $this->entityTypeManager = $entityTypeManager;
     $this->linkcheckerSetting = $config->get('linkchecker.settings');
     $this->httpClient = $httpClient;
     $this->time = $time;
     $this->queue = $queueFactory->get('linkchecker_check');
     $this->statusHandlerManager = $statusHandlerManager;
+    $this->logger = $logger;
   }
 
   /**
@@ -232,9 +240,10 @@ class LinkCheckerService {
         $link->setFailCount($link->getFailCount() + 1);
         $link->setLastCheckTime($this->time->getCurrentTime());
         $link->save();
-        linkchecker_watchdog_log('linkchecker', 'Link %link has changed and needs to be updated.', [
+        $this->logger->notice('Link %link has changed and needs to be updated.', [
           '%link' => $link->getUrl(),
-        ], RfcLogLevel::NOTICE, $this->getReportLink());
+          'link' => $this->getReportLink(),
+        ]);
         break;
 
       case 404:
@@ -244,9 +253,10 @@ class LinkCheckerService {
         $link->setLastCheckTime($this->time->getCurrentTime());
         $link->save();
 
-        linkchecker_watchdog_log('linkchecker', 'Broken link %link has been found.', [
+        $this->logger->notice('Broken link %link has been found.', [
           '%link' => $link->getUrl(),
-        ], RfcLogLevel::NOTICE, $this->getReportLink());
+          'link' => $this->getReportLink(),
+        ]);
         break;
 
       case 405:
@@ -259,9 +269,10 @@ class LinkCheckerService {
         $link->setLastCheckTime($this->time->getCurrentTime());
         $link->save();
 
-        linkchecker_watchdog_log('linkchecker', 'Method HEAD is not allowed for link %link. Method has been changed to GET.', [
+        $this->logger->notice('Method HEAD is not allowed for link %link. Method has been changed to GET.', [
           '%link' => $link->getUrl(),
-        ], RfcLogLevel::NOTICE, $this->getReportLink());
+          'link' => $this->getReportLink(),
+        ]);
         break;
 
       case 500:
@@ -274,9 +285,10 @@ class LinkCheckerService {
           $link->setLastCheckTime($this->time->getCurrentTime());
           $link->save();
 
-          linkchecker_watchdog_log('linkchecker', 'Broken link %link has been found.', [
+          $this->logger->notice('Broken link %link has been found.', [
             '%link' => $link->getUrl(),
-          ], RfcLogLevel::NOTICE, $this->getReportLink());
+            'link' => $this->getReportLink(),
+          ]);
         }
         else {
           $link->setRequestMethod('GET');
@@ -286,9 +298,10 @@ class LinkCheckerService {
           $link->setLastCheckTime($this->time->getCurrentTime());
           $link->save();
 
-          linkchecker_watchdog_log('linkchecker', 'Internal server error for link %link. Method has been changed to GET.', [
+          $this->logger->notice('Internal server error for link %link. Method has been changed to GET.', [
             '%link' => $link->getUrl(),
-          ], RfcLogLevel::NOTICE, $this->getReportLink());
+            'link' => $this->getReportLink(),
+          ]);
         }
         break;
 
@@ -308,9 +321,10 @@ class LinkCheckerService {
           $link->setLastCheckTime($this->time->getCurrentTime());
           $link->save();
 
-          linkchecker_watchdog_log('linkchecker', 'Unhandled link error %link has been found.', [
+          $this->logger->error('Unhandled link error %link has been found.', [
             '%link' => $link->getUrl(),
-          ], RfcLogLevel::ERROR, $this->getReportLink());
+            'link' => $this->getReportLink(),
+          ]);
         }
     }
 
@@ -340,10 +354,11 @@ class LinkCheckerService {
     $link->setLastCheckTime($this->time->getCurrentTime());
     $link->save();
 
-    linkchecker_watchdog_log('linkchecker', 'Unhandled link error %link has been found: : %message.', [
+    $this->logger->error('Unhandled link error %link has been found: : %message.', [
       '%link' => $link->getUrl(),
       '%message' => $e->getMessage(),
-    ], RfcLogLevel::ERROR, $this->getReportLink());
+      'link' => $this->getReportLink(),
+    ]);
 
     $this->updateSameLinks($link);
   }
diff --git a/src/Logger/LinkCheckerLogger.php b/src/Logger/LinkCheckerLogger.php
new file mode 100644
index 0000000..c12a98e
--- /dev/null
+++ b/src/Logger/LinkCheckerLogger.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Drupal\linkchecker\Logger;
+
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Logger\LoggerChannel;
+
+/**
+ * Class LinkCheckerLogger.
+ *
+ * This class overrides the default logging behaviour and makes it possible
+ * to configure which linkchecker messages should be logged.
+ *
+ * @package Drupal\linkchecker\Logger
+ */
+class LinkCheckerLogger extends LoggerChannel {
+
+  /**
+   * The link checker settings.
+   *
+   * @var \Drupal\Core\Config\ImmutableConfig
+   */
+  protected $linkCheckerSettings;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct($channel, ConfigFactoryInterface $configFactory) {
+    parent::__construct($channel);
+
+    $this->linkCheckerSettings = $configFactory->get('linkchecker.settings');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function log($level, $message, array $context = []) {
+    if ($this->levelTranslation[$level] <= $this->linkCheckerSettings->get('logging.level')) {
+      parent::log($level, $message, $context);
+    }
+  }
+
+}
