diff --git a/application/Espo/Core/Log/DefaultHandlerLoader.php b/application/Espo/Core/Log/DefaultHandlerLoader.php index 587d8849cd..b502e8270f 100644 --- a/application/Espo/Core/Log/DefaultHandlerLoader.php +++ b/application/Espo/Core/Log/DefaultHandlerLoader.php @@ -29,38 +29,40 @@ namespace Espo\Core\Log; -use Monolog\{ - Logger, - Handler\HandlerInterface, - Handler\FormattableHandlerInterface, - Formatter\FormatterInterface, -}; +use Monolog\Formatter\FormatterInterface; +use Monolog\Handler\FormattableHandlerInterface; +use Monolog\Handler\HandlerInterface; +use Monolog\Logger; use ReflectionClass; use RuntimeException; +/** + * @phpstan-type DefaultHandlerLoaderData array{ + * className?: ?class-string, + * params?: ?array, + * level?: ?string, + * formatter?: ?FormatterData, + * } + * @phpstan-type FormatterData array{ + * className?: ?class-string, + * params?: ?array, + * } + */ class DefaultHandlerLoader { /** - * @param array{ - * className?: ?class-string, - * params?: ?array, - * level?: ?string, - * } $data + * @param DefaultHandlerLoaderData $data */ public function load(array $data, ?string $defaultLevel = null): HandlerInterface { - /** @var array $data */ - $params = $data['params'] ?? []; - $level = $data['level'] ?? $defaultLevel; if ($level) { $params['level'] = Logger::toMonologLevel($level); } - /** @var ?class-string $className */ $className = $data['className'] ?? null; if (!$className) { @@ -79,23 +81,16 @@ class DefaultHandlerLoader } /** - * @param array{ - * formatter?: ?string, - * className?: ?class-string, - * params?: ?array - * } $data + * @param DefaultHandlerLoaderData $data */ protected function loadFormatter(array $data): ?FormatterInterface { - /** @var array $data */ - $formatterData = $data['formatter'] ?? null; if (!$formatterData || !is_array($formatterData)) { return null; } - /** @var ?class-string $className */ $className = $formatterData['className'] ?? null; if (!$className) { @@ -110,7 +105,7 @@ class DefaultHandlerLoader /** * @template T of object * @param class-string $className - * @param array $params + * @param array $params * @return T */ protected function createInstance(string $className, array $params): object diff --git a/application/Espo/Core/Log/EspoRotatingFileHandlerLoader.php b/application/Espo/Core/Log/EspoRotatingFileHandlerLoader.php index 8d6c285bde..27eac73f1c 100644 --- a/application/Espo/Core/Log/EspoRotatingFileHandlerLoader.php +++ b/application/Espo/Core/Log/EspoRotatingFileHandlerLoader.php @@ -29,24 +29,16 @@ namespace Espo\Core\Log; -use Espo\Core\{ - Log\Handler\EspoRotatingFileHandler, - Utils\Config, -}; +use Espo\Core\Log\Handler\EspoRotatingFileHandler; +use Espo\Core\Utils\Config; -use Monolog\{ - Logger, - Handler\HandlerInterface, -}; +use Monolog\Handler\HandlerInterface; +use Monolog\Logger; class EspoRotatingFileHandlerLoader implements HandlerLoader { - private $config; - - public function __construct(Config $config) - { - $this->config = $config; - } + public function __construct(private Config $config) + {} public function load(array $params): HandlerInterface { diff --git a/application/Espo/Core/Log/Handler/EspoFileHandler.php b/application/Espo/Core/Log/Handler/EspoFileHandler.php index 81d833a2ea..7698878749 100644 --- a/application/Espo/Core/Log/Handler/EspoFileHandler.php +++ b/application/Espo/Core/Log/Handler/EspoFileHandler.php @@ -29,15 +29,11 @@ namespace Espo\Core\Log\Handler; -use Monolog\{ - Logger, - Handler\StreamHandler as MonologStreamHandler, -}; +use Monolog\Handler\StreamHandler as MonologStreamHandler; +use Monolog\Logger; -use Espo\Core\{ - Utils\File\Manager as FileManager, - Utils\Config, -}; +use Espo\Core\Utils\Config; +use Espo\Core\Utils\File\Manager as FileManager; use RuntimeException; use Throwable; @@ -46,13 +42,15 @@ class EspoFileHandler extends MonologStreamHandler { protected FileManager $fileManager; - /** - * @var int - */ + /** @var int */ protected $maxErrorMessageLength = 5000; - public function __construct(Config $config, string $filename, int $level = Logger::DEBUG, bool $bubble = true) - { + public function __construct( + Config $config, + string $filename, + int $level = Logger::DEBUG, + bool $bubble = true + ) { parent::__construct($filename, $level, $bubble); $defaultPermissions = $config->get('defaultPermissions'); @@ -69,9 +67,7 @@ class EspoFileHandler extends MonologStreamHandler protected function write(array $record): void { if (!$this->url) { - throw new RuntimeException( - "Missing a logger file path. Check logger params in config." - ); + throw new RuntimeException("Missing a logger file path. Check logger params in config."); } try { diff --git a/application/Espo/Core/Log/Handler/EspoRotatingFileHandler.php b/application/Espo/Core/Log/Handler/EspoRotatingFileHandler.php index 3a383348c4..2d9c32cf64 100644 --- a/application/Espo/Core/Log/Handler/EspoRotatingFileHandler.php +++ b/application/Espo/Core/Log/Handler/EspoRotatingFileHandler.php @@ -31,30 +31,17 @@ namespace Espo\Core\Log\Handler; use Monolog\Logger; -use Espo\Core\{ - Utils\Config, -}; +use Espo\Core\Utils\Config; class EspoRotatingFileHandler extends EspoFileHandler { - /** - * @var string - */ + /** @var string */ protected $dateFormat = 'Y-m-d'; - - /** - * @var string - */ + /** @var string */ protected $filenameFormat = '{filename}-{date}'; - - /** - * @var string - */ + /** @var string */ protected $filename; - - /** - * @var int - */ + /** @var int */ protected $maxFiles; public function __construct( @@ -125,8 +112,8 @@ class EspoRotatingFileHandler extends EspoFileHandler $fileInfo = pathinfo($this->filename); $glob = str_replace( - array('{filename}', '{date}'), - array($fileInfo['filename'], '.*'), + ['{filename}', '{date}'], + [$fileInfo['filename'], '.*'], $this->filenameFormat ); @@ -134,8 +121,6 @@ class EspoRotatingFileHandler extends EspoFileHandler $glob .= '\.'.$fileInfo['extension']; } - $glob = '^'.$glob.'$'; - - return $glob; + return '^' . $glob . '$'; } } diff --git a/application/Espo/Core/Log/HandlerListLoader.php b/application/Espo/Core/Log/HandlerListLoader.php index 8bc4af3680..75b63f2b64 100644 --- a/application/Espo/Core/Log/HandlerListLoader.php +++ b/application/Espo/Core/Log/HandlerListLoader.php @@ -29,27 +29,20 @@ namespace Espo\Core\Log; -use Monolog\{ - Logger, - Handler\HandlerInterface, -}; +use Monolog\Handler\HandlerInterface; +use Monolog\Logger; use Espo\Core\InjectableFactory; class HandlerListLoader { - protected InjectableFactory $injectableFactory; - - protected DefaultHandlerLoader $defaultLoader; - - public function __construct(InjectableFactory $injectableFactory, DefaultHandlerLoader $defaultLoader) - { - $this->injectableFactory = $injectableFactory; - $this->defaultLoader = $defaultLoader; - } + public function __construct( + private InjectableFactory $injectableFactory, + private DefaultHandlerLoader $defaultLoader + ) {} /** - * @param array> $dataList + * @param array> $dataList * @return HandlerInterface[] */ public function load(array $dataList, ?string $defaultLevel = null): array @@ -70,31 +63,26 @@ class HandlerListLoader } /** - * @param array $data + * @param array $data */ protected function loadHandler(array $data, ?string $defaultLevel = null): ?HandlerInterface { $params = $data['params'] ?? []; - $level = $data['level'] ?? $defaultLevel; if ($level) { $params['level'] = Logger::toMonologLevel($level); } - /** @var ?class-string<\Espo\Core\Log\HandlerLoader> $loaderClassName */ + /** @var ?class-string $loaderClassName */ $loaderClassName = $data['loaderClassName'] ?? null; if ($loaderClassName) { $loader = $this->injectableFactory->create($loaderClassName); - $handler = $loader->load($params); - - return $handler; + return $loader->load($params); } - $handler = $this->defaultLoader->load($data, $defaultLevel); - - return $handler; + return $this->defaultLoader->load($data, $defaultLevel); } } diff --git a/application/Espo/Core/Log/HandlerLoader.php b/application/Espo/Core/Log/HandlerLoader.php index f696c5ad7d..16ac6e20df 100644 --- a/application/Espo/Core/Log/HandlerLoader.php +++ b/application/Espo/Core/Log/HandlerLoader.php @@ -34,7 +34,7 @@ use Monolog\Handler\HandlerInterface; interface HandlerLoader { /** - * @param array $params + * @param array $params */ public function load(array $params): HandlerInterface; } diff --git a/application/Espo/Core/Log/LogLoader.php b/application/Espo/Core/Log/LogLoader.php index 189d5146c2..37bd6cdd32 100644 --- a/application/Espo/Core/Log/LogLoader.php +++ b/application/Espo/Core/Log/LogLoader.php @@ -29,43 +29,30 @@ namespace Espo\Core\Log; -use Espo\Core\{ - InjectableFactory, - Utils\Config, - Utils\Log, - Log\HandlerListLoader, - Log\Handler\EspoRotatingFileHandler, - Log\Handler\EspoFileHandler, -}; +use Espo\Core\InjectableFactory; +use Espo\Core\Log\Handler\EspoFileHandler; +use Espo\Core\Log\Handler\EspoRotatingFileHandler; +use Espo\Core\Utils\Config; +use Espo\Core\Utils\Log; -use Monolog\{ - Logger, - ErrorHandler as MonologErrorHandler, - Formatter\LineFormatter, - Handler\HandlerInterface, -}; +use Monolog\ErrorHandler as MonologErrorHandler; +use Monolog\Formatter\LineFormatter; +use Monolog\Handler\HandlerInterface; +use Monolog\Logger; class LogLoader { - const LINE_FORMAT = "[%datetime%] %level_name%: %message% %context% %extra%\n"; + private const LINE_FORMAT = "[%datetime%] %level_name%: %message% %context% %extra%\n"; + private const DATE_FORMAT = 'Y-m-d H:i:s'; + private const PATH = 'data/logs/espo.log'; - const DATE_FORMAT = 'Y-m-d H:i:s'; + private const MAX_FILE_NUMBER = 30; + private const DEFAULT_LEVEL = 'WARNING'; - const PATH = 'data/logs/espo.log'; - - const MAX_FILE_NUMBER = 30; - - const DEFAULT_LEVEL = 'WARNING'; - - protected Config $config; - - protected InjectableFactory $injectableFactory; - - public function __construct(Config $config, InjectableFactory $injectableFactory) - { - $this->config = $config; - $this->injectableFactory = $injectableFactory; - } + public function __construct( + private Config $config, + private InjectableFactory $injectableFactory + ) {} public function load(): Log { @@ -77,13 +64,10 @@ class LogLoader $level = $this->config->get('logger.level'); $loader = $this->injectableFactory->create(HandlerListLoader::class); - $handlerList = $loader->load($handlerDataList, $level); } else { - $handler = $this->createDefaultHandler(); - - $handlerList = [$handler]; + $handlerList = [$this->createDefaultHandler()]; } foreach ($handlerList as $handler) { diff --git a/tests/unit/Espo/Core/Log/HandlerListLoaderTest.php b/tests/unit/Espo/Core/Log/HandlerListLoaderTest.php index 777dae72b6..37acfbaaeb 100644 --- a/tests/unit/Espo/Core/Log/HandlerListLoaderTest.php +++ b/tests/unit/Espo/Core/Log/HandlerListLoaderTest.php @@ -27,19 +27,15 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -namespace tests\unit\Espo\Core\Console; +namespace tests\unit\Espo\Core\Log; -use Espo\Core\{ - InjectableFactory, - Log\HandlerListLoader, - Log\EspoRotatingFileHandlerLoader, - Log\DefaultHandlerLoader, - Log\Handler\EspoRotatingFileHandler, -}; +use Espo\Core\InjectableFactory; +use Espo\Core\Log\DefaultHandlerLoader; +use Espo\Core\Log\EspoRotatingFileHandlerLoader; +use Espo\Core\Log\Handler\EspoRotatingFileHandler; +use Espo\Core\Log\HandlerListLoader; -use Monolog\{ - Logger, -}; +use Monolog\Logger; class HandlerListLoaderTest extends \PHPUnit\Framework\TestCase {