aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2025-06-30 20:48:49 +0200
committerRobin Appelman <robin@icewind.nl>2025-06-30 20:48:49 +0200
commitf608cf41b291b5963dc9d7f17d1757c766e5b1e0 (patch)
tree8d7413c998d5aa4c25227d2d5af3c4d3b4ef9d9b
parent26c5166790a1620ea4248229f4997330493a998d (diff)
downloadnextcloud-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.php22
-rw-r--r--lib/private/Server.php3
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));