]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add a scoped PSR logger for apps 21874/head
authorChristoph Wurst <christoph@winzerhof-wurst.at>
Thu, 16 Jul 2020 17:11:47 +0000 (19:11 +0200)
committerChristoph Wurst <christoph@winzerhof-wurst.at>
Thu, 16 Jul 2020 17:11:56 +0000 (19:11 +0200)
Just like for ILogger we should have a version that has the app ID
pre-set for the context (unless overwritten) so that each log entry can
be traced back to the app that produced it.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php
lib/private/AppFramework/DependencyInjection/DIContainer.php
lib/private/AppFramework/ScopedPsrLogger.php [new file with mode: 0644]

index 6a53f4e04cf634774edbdaad3b4b0915f7da1124..e60cb4c6b0e4df3bc3942b117bf043b0db735d18 100644 (file)
@@ -592,6 +592,7 @@ return array(
     'OC\\AppFramework\\OCS\\V2Response' => $baseDir . '/lib/private/AppFramework/OCS/V2Response.php',
     'OC\\AppFramework\\Routing\\RouteActionHandler' => $baseDir . '/lib/private/AppFramework/Routing/RouteActionHandler.php',
     'OC\\AppFramework\\Routing\\RouteConfig' => $baseDir . '/lib/private/AppFramework/Routing/RouteConfig.php',
+    'OC\\AppFramework\\ScopedPsrLogger' => $baseDir . '/lib/private/AppFramework/ScopedPsrLogger.php',
     'OC\\AppFramework\\Services\\AppConfig' => $baseDir . '/lib/private/AppFramework/Services/AppConfig.php',
     'OC\\AppFramework\\Services\\InitialState' => $baseDir . '/lib/private/AppFramework/Services/InitialState.php',
     'OC\\AppFramework\\Utility\\ControllerMethodReflector' => $baseDir . '/lib/private/AppFramework/Utility/ControllerMethodReflector.php',
index edb51c1865f46daaf10155991063beb3514f902d..b8944cfe7167e1a4d343867c8b8d93594c131d30 100644 (file)
@@ -621,6 +621,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
         'OC\\AppFramework\\OCS\\V2Response' => __DIR__ . '/../../..' . '/lib/private/AppFramework/OCS/V2Response.php',
         'OC\\AppFramework\\Routing\\RouteActionHandler' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Routing/RouteActionHandler.php',
         'OC\\AppFramework\\Routing\\RouteConfig' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Routing/RouteConfig.php',
+        'OC\\AppFramework\\ScopedPsrLogger' => __DIR__ . '/../../..' . '/lib/private/AppFramework/ScopedPsrLogger.php',
         'OC\\AppFramework\\Services\\AppConfig' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Services/AppConfig.php',
         'OC\\AppFramework\\Services\\InitialState' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Services/InitialState.php',
         'OC\\AppFramework\\Utility\\ControllerMethodReflector' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Utility/ControllerMethodReflector.php',
index d45c90a720595af26e4d11363584314681e49d22..cd426d64699d1961cd3d9aaffc12dfe9c3dd8c81 100644 (file)
@@ -45,8 +45,10 @@ use OC\AppFramework\Middleware\Security\CORSMiddleware;
 use OC\AppFramework\Middleware\Security\RateLimitingMiddleware;
 use OC\AppFramework\Middleware\Security\SecurityMiddleware;
 use OC\AppFramework\Middleware\SessionMiddleware;
+use OC\AppFramework\ScopedPsrLogger;
 use OC\AppFramework\Utility\SimpleContainer;
 use OC\Core\Middleware\TwoFactorMiddleware;
+use OC\Log\PsrLoggerAdapter;
 use OC\ServerContainer;
 use OCA\WorkflowEngine\Manager;
 use OCP\AppFramework\Http\IOutput;
@@ -70,6 +72,7 @@ use OCP\ISession;
 use OCP\IURLGenerator;
 use OCP\IUserSession;
 use Psr\Container\ContainerInterface;
+use Psr\Log\LoggerInterface;
 
 /**
  * @deprecated 20.0.0
@@ -128,7 +131,13 @@ class DIContainer extends SimpleContainer implements IAppContainer {
                        return $this->getServer()->getL10N($c->get('AppName'));
                });
 
-               // Log wrapper
+               // Log wrappers
+               $this->registerService(LoggerInterface::class, function (ContainerInterface $c) {
+                       return new ScopedPsrLogger(
+                               $c->get(PsrLoggerAdapter::class),
+                               $c->get('AppName')
+                       );
+               });
                $this->registerService(ILogger::class, function (ContainerInterface $c) {
                        return new OC\AppFramework\Logger($this->server->query(ILogger::class), $c->get('AppName'));
                });
diff --git a/lib/private/AppFramework/ScopedPsrLogger.php b/lib/private/AppFramework/ScopedPsrLogger.php
new file mode 100644 (file)
index 0000000..d0ace17
--- /dev/null
@@ -0,0 +1,152 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OC\AppFramework;
+
+use Psr\Log\LoggerInterface;
+use function array_merge;
+
+class ScopedPsrLogger implements LoggerInterface {
+
+       /** @var LoggerInterface */
+       private $inner;
+
+       /** @var string */
+       private $appId;
+
+       public function __construct(LoggerInterface $inner,
+                                                               string $appId) {
+               $this->inner = $inner;
+               $this->appId = $appId;
+       }
+
+       public function emergency($message, array $context = []) {
+               $this->inner->emergency(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function alert($message, array $context = []) {
+               $this->inner->alert(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function critical($message, array $context = []) {
+               $this->inner->critical(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function error($message, array $context = []) {
+               $this->inner->error(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function warning($message, array $context = []) {
+               $this->inner->warning(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function notice($message, array $context = []) {
+               $this->inner->notice(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function info($message, array $context = []) {
+               $this->inner->info(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function debug($message, array $context = []) {
+               $this->inner->debug(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+
+       public function log($level, $message, array $context = []) {
+               $this->inner->log(
+                       $message,
+                       array_merge(
+                               [
+                                       'app' => $this->appId,
+                               ],
+                               $context
+                       )
+               );
+       }
+}