diff options
author | Robin Appelman <robin@icewind.nl> | 2025-06-30 20:48:49 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2025-06-30 20:48:49 +0200 |
commit | f608cf41b291b5963dc9d7f17d1757c766e5b1e0 (patch) | |
tree | 8d7413c998d5aa4c25227d2d5af3c4d3b4ef9d9b | |
parent | 26c5166790a1620ea4248229f4997330493a998d (diff) | |
download | nextcloud-server-f608cf41b291b5963dc9d7f17d1757c766e5b1e0.tar.gz nextcloud-server-f608cf41b291b5963dc9d7f17d1757c766e5b1e0.zip |
fix: make the PsrLoggerAdapter load the real logger lazily
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r-- | lib/private/Log/PsrLoggerAdapter.php | 22 | ||||
-rw-r--r-- | lib/private/Server.php | 3 |
2 files changed, 20 insertions, 5 deletions
diff --git a/lib/private/Log/PsrLoggerAdapter.php b/lib/private/Log/PsrLoggerAdapter.php index 79e9d4d9621..1d5e5b947f5 100644 --- a/lib/private/Log/PsrLoggerAdapter.php +++ b/lib/private/Log/PsrLoggerAdapter.php @@ -20,11 +20,23 @@ use function array_key_exists; use function array_merge; final class PsrLoggerAdapter implements LoggerInterface, IDataLogger { + private ?Log $logger = null; + + /** + * @param \Closure(): Log $loggerClosure + */ public function __construct( - private Log $logger, + private $loggerClosure, ) { } + private function getLogger(): Log { + if (!$this->logger) { + $this->logger = ($this->loggerClosure)(); + } + return $this->logger; + } + public static function logLevelToInt(string $level): int { return match ($level) { LogLevel::ALERT => ILogger::ERROR, @@ -40,7 +52,7 @@ final class PsrLoggerAdapter implements LoggerInterface, IDataLogger { } public function setEventDispatcher(IEventDispatcher $eventDispatcher): void { - $this->logger->setEventDispatcher($eventDispatcher); + $this->getLogger()->setEventDispatcher($eventDispatcher); } private function containsThrowable(array $context): bool { @@ -158,7 +170,7 @@ final class PsrLoggerAdapter implements LoggerInterface, IDataLogger { throw new InvalidArgumentException('Unsupported custom log level'); } if ($this->containsThrowable($context)) { - $this->logger->logException($context['exception'], array_merge( + $this->getLogger()->logException($context['exception'], array_merge( [ 'message' => (string)$message, 'level' => $level, @@ -166,11 +178,11 @@ final class PsrLoggerAdapter implements LoggerInterface, IDataLogger { $context )); } else { - $this->logger->log($level, (string)$message, $context); + $this->getLogger()->log($level, (string)$message, $context); } } public function logData(string $message, array $data, array $context = []): void { - $this->logger->logData($message, $data, $context); + $this->getLogger()->logData($message, $data, $context); } } diff --git a/lib/private/Server.php b/lib/private/Server.php index c78decd90cb..75726d65d28 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -700,6 +700,9 @@ class Server extends ServerContainer implements IServerContainer { }); // PSR-3 logger $this->registerAlias(LoggerInterface::class, PsrLoggerAdapter::class); + $this->registerService(PsrLoggerAdapter::class, function (Server $c) { + return new PsrLoggerAdapter(fn () => $c->get(Log::class)); + }); $this->registerService(ILogFactory::class, function (Server $c) { return new LogFactory($c, $this->get(SystemConfig::class)); |