diff --git a/composer.json b/composer.json
index 569f700e9f7b30681f2ad566daea7937cd8f8674..37a1c73b76eca46a22d076cbed55333b90aee713 100644
--- a/composer.json
+++ b/composer.json
@@ -7,7 +7,6 @@
     "require-dev": {
         "adlawson/vfs": "~0.12.1",
         "camspiers/json-pretty": "~1.0.2",
-        "monolog/monolog": "~1.21.0",
         "php-http/curl-client": "~1.7.0",
         "woohoolabs/yang": "2.3.2",
         "codeception/codeception": "~4.1.21",
@@ -48,6 +47,7 @@
         "php-di/php-di": "6.3.4",
         "symfony/console": "5.3.6",
         "symfony/process": "^5.4",
-        "jumbojett/openid-connect-php": "^0.9.2"
+        "jumbojett/openid-connect-php": "^0.9.2",
+        "monolog/monolog": "^2.3"
     }
 }
diff --git a/composer.lock b/composer.lock
index 3ec63574b50a15c4bde663554e1067519672e966..de88ff8d505cfd6152b24c8067d9bd25dba541d3 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "2fa6a856bbe442274874aeabe26f054b",
+    "content-hash": "fde38f007e099b698d0f5413e21fab05",
     "packages": [
         {
             "name": "algo26-matthias/idna-convert",
@@ -694,6 +694,105 @@
             },
             "time": "2016-04-25T07:03:37+00:00"
         },
+        {
+            "name": "monolog/monolog",
+            "version": "2.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/monolog.git",
+                "reference": "fd4380d6fc37626e2f799f29d91195040137eba9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9",
+                "reference": "fd4380d6fc37626e2f799f29d91195040137eba9",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2",
+                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
+            },
+            "require-dev": {
+                "aws/aws-sdk-php": "^2.4.9 || ^3.0",
+                "doctrine/couchdb": "~1.0@dev",
+                "elasticsearch/elasticsearch": "^7",
+                "graylog2/gelf-php": "^1.4.2",
+                "mongodb/mongodb": "^1.8",
+                "php-amqplib/php-amqplib": "~2.4 || ^3",
+                "php-console/php-console": "^3.1.3",
+                "phpspec/prophecy": "^1.6.1",
+                "phpstan/phpstan": "^0.12.91",
+                "phpunit/phpunit": "^8.5",
+                "predis/predis": "^1.1",
+                "rollbar/rollbar": "^1.3",
+                "ruflin/elastica": ">=0.90@dev",
+                "swiftmailer/swiftmailer": "^5.3|^6.0"
+            },
+            "suggest": {
+                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+                "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+                "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+                "ext-mbstring": "Allow to work properly with unicode symbols",
+                "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+                "ext-openssl": "Required to send log messages using SSL",
+                "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+                "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+                "php-console/php-console": "Allow sending log messages to Google Chrome",
+                "rollbar/rollbar": "Allow sending log messages to Rollbar",
+                "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Monolog\\": "src/Monolog"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "https://seld.be"
+                }
+            ],
+            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+            "homepage": "https://github.com/Seldaek/monolog",
+            "keywords": [
+                "log",
+                "logging",
+                "psr-3"
+            ],
+            "support": {
+                "issues": "https://github.com/Seldaek/monolog/issues",
+                "source": "https://github.com/Seldaek/monolog/tree/2.3.5"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/Seldaek",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-10-01T21:08:31+00:00"
+        },
         {
             "name": "neomerx/cors-psr7",
             "version": "v1.0.13",
@@ -3871,27 +3970,27 @@
         },
         {
             "name": "codeception/codeception",
-            "version": "4.1.21",
+            "version": "4.1.29",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Codeception/Codeception.git",
-                "reference": "c25f20d842a7e3fa0a8e6abf0828f102c914d419"
+                "reference": "f8dec8f2bf5347cc596aaf141753f4fb2504c17c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Codeception/zipball/c25f20d842a7e3fa0a8e6abf0828f102c914d419",
-                "reference": "c25f20d842a7e3fa0a8e6abf0828f102c914d419",
+                "url": "https://api.github.com/repos/Codeception/Codeception/zipball/f8dec8f2bf5347cc596aaf141753f4fb2504c17c",
+                "reference": "f8dec8f2bf5347cc596aaf141753f4fb2504c17c",
                 "shasum": ""
             },
             "require": {
                 "behat/gherkin": "^4.4.0",
-                "codeception/lib-asserts": "^1.0",
+                "codeception/lib-asserts": "^1.0 | 2.0.*@dev",
                 "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0",
-                "codeception/stub": "^2.0 | ^3.0",
+                "codeception/stub": "^2.0 | ^3.0 | ^4.0",
                 "ext-curl": "*",
                 "ext-json": "*",
                 "ext-mbstring": "*",
-                "guzzlehttp/psr7": "~1.4",
+                "guzzlehttp/psr7": "^1.4 | ^2.0",
                 "php": ">=5.6.0 <9.0",
                 "symfony/console": ">=2.7 <6.0",
                 "symfony/css-selector": ">=2.7 <6.0",
@@ -3900,11 +3999,11 @@
                 "symfony/yaml": ">=2.7 <6.0"
             },
             "require-dev": {
-                "codeception/module-asserts": "1.*@dev",
-                "codeception/module-cli": "1.*@dev",
-                "codeception/module-db": "1.*@dev",
-                "codeception/module-filesystem": "1.*@dev",
-                "codeception/module-phpbrowser": "1.*@dev",
+                "codeception/module-asserts": "^1.0 | 2.0.*@dev",
+                "codeception/module-cli": "^1.0 | 2.0.*@dev",
+                "codeception/module-db": "^1.0 | 2.0.*@dev",
+                "codeception/module-filesystem": "^1.0 | 2.0.*@dev",
+                "codeception/module-phpbrowser": "^1.0 | 2.0.*@dev",
                 "codeception/specify": "~0.3",
                 "codeception/util-universalframework": "*@dev",
                 "monolog/monolog": "~1.8",
@@ -3930,7 +4029,10 @@
                 "psr-4": {
                     "Codeception\\": "src/Codeception",
                     "Codeception\\Extension\\": "ext"
-                }
+                },
+                "files": [
+                    "functions.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -3954,7 +4056,7 @@
             ],
             "support": {
                 "issues": "https://github.com/Codeception/Codeception/issues",
-                "source": "https://github.com/Codeception/Codeception/tree/4.1.21"
+                "source": "https://github.com/Codeception/Codeception/tree/4.1.29"
             },
             "funding": [
                 {
@@ -3962,7 +4064,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2021-05-28T17:43:39+00:00"
+            "time": "2022-01-29T16:56:03+00:00"
         },
         {
             "name": "codeception/lib-asserts",
@@ -4226,88 +4328,6 @@
             ],
             "time": "2020-11-10T18:47:58+00:00"
         },
-        {
-            "name": "monolog/monolog",
-            "version": "1.21.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952",
-                "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0",
-                "psr/log": "~1.0"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0.0"
-            },
-            "require-dev": {
-                "aws/aws-sdk-php": "^2.4.9",
-                "doctrine/couchdb": "~1.0@dev",
-                "graylog2/gelf-php": "~1.0",
-                "jakub-onderka/php-parallel-lint": "0.9",
-                "php-amqplib/php-amqplib": "~2.4",
-                "php-console/php-console": "^3.1.3",
-                "phpunit/phpunit": "~4.5",
-                "phpunit/phpunit-mock-objects": "2.3.0",
-                "ruflin/elastica": ">=0.90 <3.0",
-                "sentry/sentry": "^0.13",
-                "swiftmailer/swiftmailer": "~5.3"
-            },
-            "suggest": {
-                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
-                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
-                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
-                "ext-mongo": "Allow sending log messages to a MongoDB server",
-                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
-                "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
-                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
-                "php-console/php-console": "Allow sending log messages to Google Chrome",
-                "rollbar/rollbar": "Allow sending log messages to Rollbar",
-                "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
-                "sentry/sentry": "Allow sending log messages to a Sentry server"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Monolog\\": "src/Monolog"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
-            "homepage": "http://github.com/Seldaek/monolog",
-            "keywords": [
-                "log",
-                "logging",
-                "psr-3"
-            ],
-            "support": {
-                "issues": "https://github.com/Seldaek/monolog/issues",
-                "source": "https://github.com/Seldaek/monolog/tree/1.x"
-            },
-            "time": "2016-07-29T03:23:52+00:00"
-        },
         {
             "name": "myclabs/deep-copy",
             "version": "1.10.2",
@@ -6728,5 +6748,5 @@
         "ext-mbstring": "*"
     },
     "platform-dev": [],
-    "plugin-api-version": "2.1.0"
+    "plugin-api-version": "2.3.0"
 }
diff --git a/db/studip_default_data.sql b/db/studip_default_data.sql
index 49a12be97cedaf8e73cf4542531159bdc424c876..b16b3810371e7dfe99152377f80f36b45b78243d 100644
--- a/db/studip_default_data.sql
+++ b/db/studip_default_data.sql
@@ -1880,4 +1880,3 @@ INSERT INTO `widget_default` (`pluginid`, `col`, `position`, `perm`) VALUES(4, 0
 INSERT INTO `widget_default` (`pluginid`, `col`, `position`, `perm`) VALUES(5, 1, 0, 'root');
 INSERT INTO `widget_default` (`pluginid`, `col`, `position`, `perm`) VALUES(7, 0, 2, 'root');
 INSERT INTO `widget_default` (`pluginid`, `col`, `position`, `perm`) VALUES(27, 0, 1, 'root');
-
diff --git a/lib/classes/JsonApi/Errors/ErrorHandler.php b/lib/classes/JsonApi/Errors/ErrorHandler.php
index 93549b50a169c007021cb554e7ef5749c1ead8e9..6b7d23a02c8bba20f4a5c78b7554caa24a59ab01 100644
--- a/lib/classes/JsonApi/Errors/ErrorHandler.php
+++ b/lib/classes/JsonApi/Errors/ErrorHandler.php
@@ -17,9 +17,13 @@ class ErrorHandler
     /** @var \Slim\App */
     private $app;
 
-    public function __construct(App $app)
+    /** @var \Psr\Log\LoggerInterface */
+    private $logger;
+
+    public function __construct(App $app, LoggerInterface $logger)
     {
         $this->app = $app;
+        $this->logger = $logger;
     }
 
     public function __invoke(
@@ -30,9 +34,7 @@ class ErrorHandler
         bool $logErrorDetails,
         ?LoggerInterface $logger = null
     ): ResponseInterface {
-        if ($logger) {
-            $logger->error($exception->getMessage());
-        }
+        $this->logger->error($exception->getMessage());
 
         $response = $this->app->getResponseFactory()->createResponse();
         $response->getBody()->write($this->determinePayload($exception, $displayErrorDetails));
diff --git a/public/jsonapi.php b/public/jsonapi.php
index 1dfd51bdb450ad2521ad128383aa0aac311e48db..62c0ce01042348640071ffbd0d39297c9256128d 100644
--- a/public/jsonapi.php
+++ b/public/jsonapi.php
@@ -53,8 +53,11 @@ if (defined('\\Studip\\ENV')) {
 $logError = true;
 $logErrorDetails = true;
 
-$errorMiddleware = $app->addErrorMiddleware($displayErrors, $logError, $logErrorDetails);
-$errorMiddleware->setDefaultErrorHandler(new \JsonApi\Errors\ErrorHandler($app));
+$logger = new \Monolog\Logger('jsonapi-log');
+$logger->pushHandler(new \Monolog\Handler\ErrorLogHandler());
+
+$errorMiddleware = $app->addErrorMiddleware($displayErrors, $logError, $logErrorDetails, $logger);
+$errorMiddleware->setDefaultErrorHandler(new \JsonApi\Errors\ErrorHandler($app, $logger));
 
 // Run app
 $app->run();
diff --git a/tests/_support/Helper/Jsonapi.php b/tests/_support/Helper/Jsonapi.php
index e435cad1c7259b3502c9e25f46ab8fe9a41cd56b..98385ae950b93a7b859a1511bb234d449fb5d0fe 100644
--- a/tests/_support/Helper/Jsonapi.php
+++ b/tests/_support/Helper/Jsonapi.php
@@ -176,9 +176,12 @@ class Jsonapi extends \Codeception\Module
         $middleware = require 'lib/classes/JsonApi/middleware.php';
         $middleware($app);
 
+        $logger = new \Monolog\Logger('jsonapi-log');
+        $logger->pushHandler(new \Monolog\Handler\ErrorLogHandler());
+
         // Add Error Middleware
         $errorMiddleware = $app->addErrorMiddleware(true, true, true);
-        $errorMiddleware->setDefaultErrorHandler(new \JsonApi\Errors\ErrorHandler($app));
+        $errorMiddleware->setDefaultErrorHandler(new \JsonApi\Errors\ErrorHandler($app, $logger));
 
         return $app;
     }