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; }