diff --git a/filelog.services.yml b/filelog.services.yml index a4daae5..7b3f5a8 100644 --- a/filelog.services.yml +++ b/filelog.services.yml @@ -4,7 +4,6 @@ services: arguments: - '@config.factory' - '@state' - - '@token' - '@datetime.time' - '@logger.log_message_parser' - '@filelog.file_manager' @@ -21,7 +20,6 @@ services: arguments: - '@config.factory' - '@state' - - '@token' - '@datetime.time' - '@filelog.file_manager' - '@file_system' diff --git a/src/LogRotator.php b/src/LogRotator.php index 94e2b3b..78331de 100644 --- a/src/LogRotator.php +++ b/src/LogRotator.php @@ -3,6 +3,7 @@ namespace Drupal\filelog; use Drupal\Component\Datetime\TimeInterface; +use Drupal\Component\DependencyInjection\ContainerInterface; use Drupal\Component\Render\PlainTextOutput; use Drupal\Core\Config\Config; use Drupal\Core\Config\ConfigFactoryInterface; @@ -41,11 +42,18 @@ class LogRotator { protected StateInterface $state; /** - * The token service. + * The (lazy loaded) dependency injection (DI) container. * - * @var \Drupal\Core\Utility\Token + * @var ?\Drupal\Component\DependencyInjection\ContainerInterface */ - protected Token $token; + protected ?ContainerInterface $container; + + /** + * The (lazy loaded) token object. + * + * @var ?\Drupal\Core\Utility\Token + */ + protected ?Token $token; /** * The datetime.time service. @@ -75,8 +83,6 @@ class LogRotator { * The config.factory service. * @param \Drupal\Core\State\StateInterface $state * The state service. - * @param \Drupal\Core\Utility\Token $token - * The token service. * @param \Drupal\Component\Datetime\TimeInterface $time * The datetime.time service. * @param \Drupal\filelog\LogFileManagerInterface $fileManager @@ -84,10 +90,9 @@ class LogRotator { * @param \Drupal\Core\File\FileSystemInterface $fileSystem * The file_system service. */ - public function __construct(ConfigFactoryInterface $configFactory, StateInterface $state, Token $token, TimeInterface $time, LogFileManagerInterface $fileManager, FileSystemInterface $fileSystem) { + public function __construct(ConfigFactoryInterface $configFactory, StateInterface $state, TimeInterface $time, LogFileManagerInterface $fileManager, FileSystemInterface $fileSystem) { $this->config = $configFactory->get('filelog.settings'); $this->state = $state; - $this->token = $token; $this->time = $time; $this->fileManager = $fileManager; $this->fileSystem = $fileSystem; @@ -142,7 +147,7 @@ class LogRotator { $timestamp = $this->state->get('filelog.rotation'); if (!$truncate) { - $destination = $this->token->replace( + $destination = $this->token()->replace( $this->config->get('rotation.destination'), ['date' => $timestamp] ); @@ -261,4 +266,30 @@ class LogRotator { return TRUE; } + /** + * Get Dependency Injection container. + * + * @return \Drupal\Component\DependencyInjection\ContainerInterface + * Current Dependency Injection container. + */ + protected function getContainer(): ContainerInterface { + if (!isset($this->container)) { + $this->container = \Drupal::getContainer(); + } + return $this->container; + } + + /** + * Get lazy-loaded Token service. + * + * @return \Drupal\Core\Utility\Token + * Token service. + */ + protected function token(): Token { + if (!isset($this->token)) { + $this->token = $this->getContainer()->get('token'); + } + return $this->token; + } + } diff --git a/src/Logger/FileLog.php b/src/Logger/FileLog.php index 0cd03d3..93b55a5 100644 --- a/src/Logger/FileLog.php +++ b/src/Logger/FileLog.php @@ -3,6 +3,7 @@ namespace Drupal\filelog\Logger; use Drupal\Component\Datetime\TimeInterface; +use Drupal\Component\DependencyInjection\ContainerInterface; use Drupal\Component\Render\PlainTextOutput; use Drupal\Core\Config\Config; use Drupal\Core\Config\ConfigFactoryInterface; @@ -44,11 +45,18 @@ class FileLog implements LoggerInterface { protected StateInterface $state; /** - * The token system, for formatting the log messages. + * The (lazy loaded) dependency injection (DI) container. * - * @var \Drupal\Core\Utility\Token + * @var ?\Drupal\Component\DependencyInjection\ContainerInterface */ - protected Token $token; + protected ?ContainerInterface $container; + + /** + * The (lazy loaded) token object. + * + * @var ?\Drupal\Core\Utility\Token + */ + protected ?Token $token; /** * The log message parser, for formatting the log messages. @@ -92,8 +100,6 @@ class FileLog implements LoggerInterface { * The config.factory service. * @param \Drupal\Core\State\StateInterface $state * The state service. - * @param \Drupal\Core\Utility\Token $token - * The token service. * @param \Drupal\Component\Datetime\TimeInterface $time * The datetime.time service. * @param \Drupal\Core\Logger\LogMessageParserInterface $parser @@ -101,10 +107,9 @@ class FileLog implements LoggerInterface { * @param \Drupal\filelog\LogFileManagerInterface $fileManager * The filelog.file_manager service. */ - public function __construct(ConfigFactoryInterface $configFactory, StateInterface $state, Token $token, TimeInterface $time, LogMessageParserInterface $parser, LogFileManagerInterface $fileManager) { + public function __construct(ConfigFactoryInterface $configFactory, StateInterface $state, TimeInterface $time, LogMessageParserInterface $parser, LogFileManagerInterface $fileManager) { $this->config = $configFactory->get('filelog.settings'); $this->state = $state; - $this->token = $token; $this->time = $time; $this->parser = $parser; $this->fileManager = $fileManager; @@ -219,7 +224,7 @@ class FileLog implements LoggerInterface { // logfile. $bubbleable_metadata_to_discard = new BubbleableMetadata(); $log = new LogMessage($level, $message, $variables, $context); - $entry = $this->token->replace( + $entry = $this->token()->replace( $this->config->get('format'), ['log' => $log], [], @@ -257,4 +262,30 @@ class FileLog implements LoggerInterface { } } + /** + * Get Dependency Injection container. + * + * @return \Drupal\Component\DependencyInjection\ContainerInterface + * Current Dependency Injection container. + */ + protected function getContainer(): ContainerInterface { + if (!isset($this->container)) { + $this->container = \Drupal::getContainer(); + } + return $this->container; + } + + /** + * Get lazy-loaded Token service. + * + * @return \Drupal\Core\Utility\Token + * Token service. + */ + protected function token(): Token { + if (!isset($this->token)) { + $this->token = $this->getContainer()->get('token'); + } + return $this->token; + } + } diff --git a/tests/src/Unit/FileLogRotationTest.php b/tests/src/Unit/FileLogRotationTest.php index 20a4551..f43ecda 100644 --- a/tests/src/Unit/FileLogRotationTest.php +++ b/tests/src/Unit/FileLogRotationTest.php @@ -71,6 +71,7 @@ class FileLogRotationTest extends FileLogTestBase { $this->token ->method('replace') ->willReturnCallback([static::class, 'tokenReplace']); + \Drupal::getContainer()->set('token', $this->token); $this->time = $this ->getMockBuilder(TimeInterface::class) @@ -115,7 +116,6 @@ class FileLogRotationTest extends FileLogTestBase { file_put_contents($logFile, $data); $rotator = new LogRotator($configFactory, $state, - $this->token, $this->time, $this->fileManager, $this->fileSystem); diff --git a/tests/src/Unit/FileLogTest.php b/tests/src/Unit/FileLogTest.php index 0d0c992..ee9acbb 100644 --- a/tests/src/Unit/FileLogTest.php +++ b/tests/src/Unit/FileLogTest.php @@ -55,6 +55,8 @@ class FileLogTest extends FileLogTestBase { $this->token->method('replace') ->willReturnCallback([static::class, 'tokenReplace']); + \Drupal::getContainer()->set('token', $this->token); + $this->time = $this->createMock(TimeInterface::class); $this->time->method('getRequestTime') ->willReturn($_SERVER['REQUEST_TIME']); @@ -102,7 +104,6 @@ class FileLogTest extends FileLogTestBase { $logger = new FileLog( $configFactory, $state, - $this->token, $this->time, $this->logMessageParser, $logFileManager = new LogFileManager($configFactory, $this->fileSystem)