diff --git a/jsonlog.info.yml b/jsonlog.info.yml
index 3066772..4aed694 100644
--- a/jsonlog.info.yml
+++ b/jsonlog.info.yml
@@ -1,6 +1,6 @@
 name: JSON Log
 type: module
 description: Logs watchdog events JSON-formatted to file.
-core_version_requirement: ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 package: Administration
 configure: system.logging_settings
diff --git a/jsonlog.install b/jsonlog.install
index 2759859..1e9953f 100644
--- a/jsonlog.install
+++ b/jsonlog.install
@@ -1,5 +1,11 @@
 <?php
 
+/**
+ * @file
+ */
+
+use Drupal\Component\Utility\DeprecationHelper;
+
 /**
  * @file
  * Install, update and uninstall functions for the jsonlog module.
@@ -9,7 +15,7 @@
  * Implements hook_install().
  */
 function jsonlog_install() {
-  \Drupal::configFactory()->getEditable('jsonlog.settings')->save(true);
+  DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.4.0', fn() => \Drupal::configFactory()->getEditable('jsonlog.settings')->save(), fn() => \Drupal::configFactory()->getEditable('jsonlog.settings')->save(TRUE));
 }
 
 /**
diff --git a/jsonlog.module b/jsonlog.module
index 228aecf..e0c3647 100644
--- a/jsonlog.module
+++ b/jsonlog.module
@@ -5,6 +5,8 @@
  * Contains jsonlog.module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\jsonlog\Hook\JsonlogHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Form\FormStateInterface;
 
@@ -12,21 +14,11 @@ use Drupal\Core\Form\FormStateInterface;
  * Implements hook_help().
  *
  * @param string $route_name
- * @param RouteMatchInterface $route_match
+ * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
  */
+#[LegacyHook]
 function jsonlog_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the jsonlog module.
-    case 'help.page.jsonlog':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>'
-        . t('Logs all events picked up by Drupal\'s LoggerInterface to a JSON-formatted file.', [], ['context' => 'module:jsonlog'])
-        . '</p>';
-      return $output;
-
-    default:
-  }
+  return \Drupal::service(JsonlogHooks::class)->help($route_name, $route_match);
 }
 
 /**
@@ -36,16 +28,16 @@ function jsonlog_help($route_name, RouteMatchInterface $route_match) {
  * @see _jsonlog_form_system_logging_settings_alter()
  *
  * @param array $form
- * @param FormStateInterface $form_state
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
  */
+#[LegacyHook]
 function jsonlog_form_system_logging_settings_alter(&$form, FormStateInterface $form_state) {
-  \Drupal::moduleHandler()->loadInclude('jsonlog', 'inc');
-  _jsonlog_form_system_logging_settings_alter($form, $form_state);
+  \Drupal::service(JsonlogHooks::class)->formSystemLoggingSettingsAlter($form, $form_state);
 }
 
 /**
  * @param array $form
- * @param FormStateInterface $form_state
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
  */
 function jsonlog_form_system_logging_settings_validate($form, FormStateInterface $form_state) {
   $values =& $form_state->getValues();
@@ -65,7 +57,7 @@ function jsonlog_form_system_logging_settings_validate($form, FormStateInterface
  * Custom submit handler for the system logging settings form.
  *
  * @param array $form
- * @param FormStateInterface $form_state
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
  */
 function jsonlog_form_system_logging_settings_submit($form, FormStateInterface $form_state) {
   \Drupal::moduleHandler()->loadInclude('jsonlog', 'inc');
@@ -121,8 +113,8 @@ function jsonlog_form_system_logging_settings_submit($form, FormStateInterface $
     ->set('jsonlog_tags', $values['jsonlog_tags'])
     ->save();
 
-  // Write a test-entry via our logger service with data from the example table
-  if($values['test_entry'] === 1) {
+  // Write a test-entry via our logger service with data from the example table.
+  if ($values['test_entry'] === 1) {
     /** @var \Drupal\jsonlog\Logger\JsonLog $jsonlogger */
     $jsonlogger = \Drupal::service('logger.jsonlog');
     $context = [
diff --git a/jsonlog.services.yml b/jsonlog.services.yml
index 6610da1..b0683c7 100644
--- a/jsonlog.services.yml
+++ b/jsonlog.services.yml
@@ -4,3 +4,7 @@ services:
     arguments: ['@config.factory', '@logger.log_message_parser', '@module_handler', '@request_stack']
     tags:
       - { name: logger }
+
+  Drupal\jsonlog\Hook\JsonlogHooks:
+    class: Drupal\jsonlog\Hook\JsonlogHooks
+    autowire: true
diff --git a/src/Hook/JsonlogHooks.php b/src/Hook/JsonlogHooks.php
new file mode 100644
index 0000000..86e0e64
--- /dev/null
+++ b/src/Hook/JsonlogHooks.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Drupal\jsonlog\Hook;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for jsonlog.
+ */
+class JsonlogHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   *
+   * @param string $route_name
+   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      // Main module help for the jsonlog module.
+      case 'help.page.jsonlog':
+        $output = '';
+        $output .= '<h3>' . $this->t('About') . '</h3>';
+        $output .= '<p>' . $this->t('Logs all events picked up by Drupal\'s LoggerInterface to a JSON-formatted file.', [], [
+          'context' => 'module:jsonlog',
+        ]) . '</p>';
+        return $output;
+
+      default:
+    }
+  }
+
+  /**
+   * Adds this module's setting fields to the system logging settings form.
+   * Implements hook_form_FORM_ID_alter().
+   *
+   * @see _jsonlog_form_system_logging_settings_alter()
+   *
+   * @param array $form
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   */
+  #[Hook('form_system_logging_settings_alter')]
+  public static function formSystemLoggingSettingsAlter(&$form, FormStateInterface $form_state) {
+    \Drupal::moduleHandler()->loadInclude('jsonlog', 'inc');
+    _jsonlog_form_system_logging_settings_alter($form, $form_state);
+  }
+
+}
