From 752d05c1c62135ecbf242283c6692b6dc2a4995c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D?= Date: Tue, 23 Apr 2019 20:50:15 +0200 Subject: [PATCH] * [MOD] Improved logging messages * [MOD] Unlocked PHP 7.3 * [FIX] No debug messages when debug mode is activated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rubén D --- app/modules/web/Init.php | 44 ++++-- lib/BaseFunctions.php | 29 ++-- lib/Definitions.php | 30 ++-- lib/SP/Core/Events/EventMessage.php | 16 +- lib/SP/Core/ModuleBase.php | 2 +- lib/SP/Providers/Log/FileLogHandler.php | 44 +----- lib/SP/Providers/Log/LoggerBase.php | 145 +++++++++++++++++++ lib/SP/Providers/Log/RemoteSyslogHandler.php | 92 ++---------- lib/SP/Providers/Log/SyslogHandler.php | 73 +--------- lib/SP/Util/Checks.php | 2 +- 10 files changed, 236 insertions(+), 241 deletions(-) create mode 100644 lib/SP/Providers/Log/LoggerBase.php diff --git a/app/modules/web/Init.php b/app/modules/web/Init.php index c4e064b8..454a68c6 100644 --- a/app/modules/web/Init.php +++ b/app/modules/web/Init.php @@ -25,6 +25,10 @@ namespace SP\Modules\Web; use Defuse\Crypto\Exception\CryptoException; +use Defuse\Crypto\Exception\EnvironmentIsBrokenException; +use DI\DependencyException; +use DI\NotFoundException; +use Exception; use Psr\Container\ContainerInterface; use SP\Bootstrap; use SP\Core\Context\ContextInterface; @@ -32,12 +36,18 @@ use SP\Core\Context\SessionContext; use SP\Core\Crypt\CryptSessionHandler; use SP\Core\Crypt\Session as CryptSession; use SP\Core\Crypt\UUIDCookie; +use SP\Core\Exceptions\ConstraintException; +use SP\Core\Exceptions\InvalidArgumentException; +use SP\Core\Exceptions\NoSuchPropertyException; +use SP\Core\Exceptions\QueryException; +use SP\Core\Exceptions\SPException; use SP\Core\Language; use SP\Core\ModuleBase; use SP\Core\UI\ThemeInterface; use SP\DataModel\ItemPreset\SessionTimeout; use SP\Http\Address; use SP\Plugin\PluginManager; +use SP\Repositories\NoSuchItemException; use SP\Services\Crypt\SecureSessionService; use SP\Services\ItemPreset\ItemPresetInterface; use SP\Services\ItemPreset\ItemPresetService; @@ -46,6 +56,7 @@ use SP\Services\Upgrade\UpgradeDatabaseService; use SP\Services\Upgrade\UpgradeUtil; use SP\Services\UserProfile\UserProfileService; use SP\Storage\Database\DatabaseUtil; +use SP\Storage\File\FileException; use SP\Util\HttpUtil; /** @@ -125,14 +136,14 @@ final class Init extends ModuleBase * * @param string $controller * - * @throws \DI\DependencyException - * @throws \DI\NotFoundException - * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException - * @throws \SP\Core\Exceptions\ConstraintException - * @throws \SP\Core\Exceptions\QueryException - * @throws \SP\Core\Exceptions\SPException - * @throws \SP\Repositories\NoSuchItemException - * @throws \Exception + * @throws DependencyException + * @throws NotFoundException + * @throws EnvironmentIsBrokenException + * @throws ConstraintException + * @throws QueryException + * @throws SPException + * @throws NoSuchItemException + * @throws Exception */ public function initialize($controller) { @@ -248,7 +259,7 @@ final class Init extends ModuleBase * * @param bool $encrypt Encriptar la sesión de PHP * - * @throws \Exception + * @throws Exception */ private function initSession($encrypt = false) { @@ -261,7 +272,7 @@ final class Init extends ModuleBase try { $this->context->initialize(); - } catch (\Exception $e) { + } catch (Exception $e) { $this->router->response()->header('HTTP/1.1', '500 Internal Server Error'); throw $e; @@ -280,7 +291,8 @@ final class Init extends ModuleBase /** * Comprobar si es necesario actualizar componentes - * @throws \SP\Storage\File\FileException + * + * @throws FileException */ private function checkUpgrade() { @@ -352,7 +364,7 @@ final class Init extends ModuleBase return $this->context->setSessionTimeout($userTimeout); } - } catch (\Exception $e) { + } catch (Exception $e) { processException($e); } @@ -363,10 +375,10 @@ final class Init extends ModuleBase * @param int $default * * @return int - * @throws \SP\Core\Exceptions\ConstraintException - * @throws \SP\Core\Exceptions\InvalidArgumentException - * @throws \SP\Core\Exceptions\NoSuchPropertyException - * @throws \SP\Core\Exceptions\QueryException + * @throws ConstraintException + * @throws InvalidArgumentException + * @throws NoSuchPropertyException + * @throws QueryException */ private function getSessionTimeoutForUser(int $default = null) { diff --git a/lib/BaseFunctions.php b/lib/BaseFunctions.php index eb98c76e..17413d81 100644 --- a/lib/BaseFunctions.php +++ b/lib/BaseFunctions.php @@ -29,7 +29,7 @@ define('LOG_FORMAT', "[%s] [%s] %s"); /** * [timestamp] [type] [caller] data */ -define('LOG_FORMAT_OWN', "%s [%s] [%s] %s\n"); +define('LOG_FORMAT_OWN', '[%s] syspass.%s: logger {"message":"%s","caller":"%s"}' . PHP_EOL); /** * Basic logger to handle some debugging and exception messages. @@ -40,7 +40,7 @@ define('LOG_FORMAT_OWN', "%s [%s] [%s] %s\n"); * * A more advanced event logging should be handled through EventDispatcher * - * @param mixed $data + * @param mixed $data * @param string $type */ function logger($data, $type = 'DEBUG') @@ -53,9 +53,9 @@ function logger($data, $type = 'DEBUG') $caller = getLastCaller(); if (is_scalar($data)) { - $line = sprintf(LOG_FORMAT_OWN, $date, $type, $caller, $data); + $line = sprintf(LOG_FORMAT_OWN, $date, $type, $data, $caller); } else { - $line = sprintf(LOG_FORMAT_OWN, $date, $type, $caller, print_r($data, true)); + $line = sprintf(LOG_FORMAT_OWN, $date, $type, print_r($data, true), $caller); } $useOwn = (!defined('LOG_FILE') @@ -64,9 +64,9 @@ function logger($data, $type = 'DEBUG') if ($useOwn === false) { if (is_scalar($data)) { - $line = sprintf(LOG_FORMAT, $type, $caller, $data); + $line = sprintf(LOG_FORMAT, $type, $data, $caller); } else { - $line = sprintf(LOG_FORMAT, $type, $caller, print_r($data, true)); + $line = sprintf(LOG_FORMAT, $type, print_r($data, true), $caller); } error_log($line); @@ -84,17 +84,16 @@ function printLastCallers() /** * Print last caller from backtrace * + * @param int $skip + * * @return string */ -function getLastCaller() +function getLastCaller($skip = 2) { - $callers = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3); + $callers = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5); - if (isset($callers[2]) - && isset($callers[2]['class']) - && isset($callers[2]['function']) - ) { - return $callers[2]['class'] . '::' . $callers[2]['function']; + if (isset($callers[$skip], $callers[$skip]['class'], $callers[$skip]['function'])) { + return $callers[$skip]['class'] . '::' . $callers[$skip]['function']; } return 'N/A'; @@ -140,7 +139,7 @@ function formatTrace($trace) * Alias gettext function * * @param string $message - * @param bool $translate Si es necesario traducir + * @param bool $translate Si es necesario traducir * * @return string */ @@ -167,7 +166,7 @@ function __u($message) * * @param string $domain * @param string $message - * @param bool $translate + * @param bool $translate * * @return string */ diff --git a/lib/Definitions.php b/lib/Definitions.php index bc0dd8c6..8cb7b610 100644 --- a/lib/Definitions.php +++ b/lib/Definitions.php @@ -30,9 +30,12 @@ use SP\Config\ConfigData; use SP\Core\Acl\Acl; use SP\Core\Acl\Actions; use SP\Core\Context\ContextInterface; +use SP\Core\Context\SessionContext; +use SP\Core\Context\StatelessContext; use SP\Core\MimeTypes; use SP\Core\UI\Theme; use SP\Core\UI\ThemeInterface; +use SP\Http\Client; use SP\Http\Request; use SP\Services\Account\AccountAclService; use SP\Storage\Database\DatabaseConnectionData; @@ -41,17 +44,20 @@ use SP\Storage\Database\MySQLHandler; use SP\Storage\File\FileCache; use SP\Storage\File\FileHandler; use SP\Storage\File\XmlHandler; +use function DI\autowire; +use function DI\create; +use function DI\factory; use function DI\get; return [ - Request::class => \DI\create(Request::class) + Request::class => create(Request::class) ->constructor(\Klein\Request::createFromGlobals()), ContextInterface::class => function (ContainerInterface $c) { switch (APP_MODULE) { case 'web': - return $c->get(\SP\Core\Context\SessionContext::class); + return $c->get(SessionContext::class); default: - return $c->get(\SP\Core\Context\StatelessContext::class); + return $c->get(StatelessContext::class); } }, Config::class => function (ContainerInterface $c) { @@ -63,8 +69,8 @@ return [ ConfigData::class => function (Config $config) { return $config->getConfigData(); }, - DBStorageInterface::class => \DI\create(MySQLHandler::class) - ->constructor(\DI\factory([DatabaseConnectionData::class, 'getFromConfig'])), + DBStorageInterface::class => create(MySQLHandler::class) + ->constructor(factory([DatabaseConnectionData::class, 'getFromConfig'])), Actions::class => function (ContainerInterface $c) { return new Actions( new FileCache(Actions::ACTIONS_CACHE_FILE), @@ -77,16 +83,16 @@ return [ new XmlHandler(new FileHandler(MIMETYPES_FILE)) ); }, - Acl::class => \DI\autowire(Acl::class) + Acl::class => autowire(Acl::class) ->constructorParameter('action', get(Actions::class)), - ThemeInterface::class => \DI\autowire(Theme::class) + ThemeInterface::class => autowire(Theme::class) ->constructorParameter('module', APP_MODULE) ->constructorParameter('fileCache', new FileCache(Theme::ICONS_CACHE_FILE)), - PHPMailer::class => \DI\create(PHPMailer::class) + PHPMailer::class => create(PHPMailer::class) ->constructor(true), - Logger::class => \DI\create(Logger::class) + Logger::class => create(Logger::class) ->constructor('syspass'), - AccountAclService::class => \DI\autowire(AccountAclService::class), - \GuzzleHttp\Client::class => \DI\create(GuzzleHttp\Client::class) - ->constructor(\DI\factory([\SP\Http\Client::class, 'getOptions'])) + AccountAclService::class => autowire(AccountAclService::class), + \GuzzleHttp\Client::class => create(GuzzleHttp\Client::class) + ->constructor(factory([Client::class, 'getOptions'])) ]; \ No newline at end of file diff --git a/lib/SP/Core/Events/EventMessage.php b/lib/SP/Core/Events/EventMessage.php index 3cc5595b..73e770b2 100644 --- a/lib/SP/Core/Events/EventMessage.php +++ b/lib/SP/Core/Events/EventMessage.php @@ -119,14 +119,6 @@ final class EventMessage implements MessageInterface { $this->description[] = $this->formatString($description); - return $this; - } - - /** - * Añadir una línea en blanco a la descripción - */ - public function addDescriptionLine() - { $this->descriptionCounter++; return $this; @@ -141,6 +133,10 @@ final class EventMessage implements MessageInterface */ public function composeText($delimiter = PHP_EOL) { + if ($this->descriptionCounter === 0 && $this->detailsCounter === 0) { + return ''; + } + $formatter = new TextFormatter($delimiter); return implode($delimiter, [ @@ -159,7 +155,7 @@ final class EventMessage implements MessageInterface */ public function getDescription(FormatterInterface $formatter, $translate = false) { - if (count($this->description) === 0) { + if ($this->descriptionCounter === 0) { return ''; } @@ -176,7 +172,7 @@ final class EventMessage implements MessageInterface */ public function getDetails(FormatterInterface $formatter, bool $translate = false) { - if (count($this->details) === 0) { + if ($this->detailsCounter === 0) { return ''; } diff --git a/lib/SP/Core/ModuleBase.php b/lib/SP/Core/ModuleBase.php index 44657579..c2741dc4 100644 --- a/lib/SP/Core/ModuleBase.php +++ b/lib/SP/Core/ModuleBase.php @@ -126,7 +126,7 @@ abstract class ModuleBase { $eventDispatcher = $this->container->get(EventDispatcher::class); - if (DEBUG) { + if (DEBUG || $this->configData->isDebug()) { $eventDispatcher->attach($this->container->get(FileLogHandler::class)); } diff --git a/lib/SP/Providers/Log/FileLogHandler.php b/lib/SP/Providers/Log/FileLogHandler.php index 65cf44b5..c4fd41d4 100644 --- a/lib/SP/Providers/Log/FileLogHandler.php +++ b/lib/SP/Providers/Log/FileLogHandler.php @@ -28,13 +28,10 @@ namespace SP\Providers\Log; use DI\Container; use DI\DependencyException; use DI\NotFoundException; -use Exception; +use Monolog\Handler\StreamHandler; use SP\Core\Events\Event; -use SP\Core\Events\EventReceiver; use SP\Core\Exceptions\InvalidClassException; -use SP\Core\Language; use SP\Providers\EventsTrait; -use SP\Providers\Provider; use SplSubject; /** @@ -42,21 +39,10 @@ use SplSubject; * * @package SP\Providers\Log */ -final class FileLogHandler extends Provider implements EventReceiver +final class FileLogHandler extends LoggerBase { use EventsTrait; - const MESSAGE_FORMAT = '%s;%s'; - - /** - * @var string - */ - private $events; - /** - * @var Language - */ - private $language; - /** * Devuelve los eventos que implementa el observador * @@ -95,27 +81,6 @@ final class FileLogHandler extends Provider implements EventReceiver $this->updateEvent('update', new Event($subject)); } - /** - * Evento de actualización - * - * @param string $eventType Nombre del evento - * @param Event $event Objeto del evento - * - * @throws InvalidClassException - */ - public function updateEvent($eventType, Event $event) - { - $this->language->setAppLocales(); - - if (($e = $event->getSource()) instanceof Exception) { - logger(sprintf(self::MESSAGE_FORMAT, $eventType, __($e->getMessage()))); - } elseif (($eventMessage = $event->getEventMessage()) !== null) { - logger(sprintf(self::MESSAGE_FORMAT, $eventType, $eventMessage->composeText(';'))); - } - - $this->language->unsetAppLocales(); - } - /** * @param Container $dic * @@ -124,7 +89,8 @@ final class FileLogHandler extends Provider implements EventReceiver */ protected function initialize(Container $dic) { - $this->language = $dic->get(Language::class); - $this->events = $this->parseEventsToRegex(array_merge(LogInterface::EVENTS, LogInterface::EVENTS_FIXED)); + parent::initialize($dic); + + $this->logger->pushHandler(new StreamHandler(LOG_FILE)); } } \ No newline at end of file diff --git a/lib/SP/Providers/Log/LoggerBase.php b/lib/SP/Providers/Log/LoggerBase.php new file mode 100644 index 00000000..7e320f52 --- /dev/null +++ b/lib/SP/Providers/Log/LoggerBase.php @@ -0,0 +1,145 @@ +. + */ + +namespace SP\Providers\Log; + + +use DI\Container; +use DI\DependencyException; +use DI\NotFoundException; +use Exception; +use Monolog\Logger; +use SP\Core\Events\Event; +use SP\Core\Events\EventReceiver; +use SP\Core\Exceptions\InvalidClassException; +use SP\Core\Language; +use SP\Http\Request; +use SP\Providers\EventsTrait; +use SP\Providers\Provider; + +/** + * Class LoggerBase + * + * @package SP\Providers\Log + */ +abstract class LoggerBase extends Provider implements EventReceiver +{ + use EventsTrait; + + const MESSAGE_FORMAT = 'event="%s";address="%s";user="%s";message="%s"'; + /** + * @var Logger + */ + protected $logger; + /** + * @var Request + */ + protected $request; + /** + * @var string + */ + protected $events; + /** + * @var Language + */ + protected $language; + + /** + * Evento de actualización + * + * @param string $eventType Nombre del evento + * @param Event $event Objeto del evento + * + * @throws InvalidClassException + */ + public function updateEvent($eventType, Event $event) + { + $this->language->setAppLocales(); + + $userLogin = $this->context->getUserData()->getLogin() ?: 'N/A'; + $source = $event->getSource(); + + if ($source instanceof Exception) { + /** @var Exception $source */ + $this->logger->error($eventType, + $this->formatContext( + __($source->getMessage()), + $this->request->getClientAddress(true), + $userLogin)); + } elseif (($eventMessage = $event->getEventMessage()) !== null) { + $this->logger->debug($eventType, + $this->formatContext( + $eventMessage->composeText(' '), + $this->request->getClientAddress(true), + $userLogin)); + } else { + $this->logger->debug($eventType, + $this->formatContext( + 'N/A', + $this->request->getClientAddress(true), + $userLogin)); + } + + $this->language->unsetAppLocales(); + } + + /** + * @param $message + * @param $address + * @param $user + * + * @return array + */ + final protected function formatContext($message, $address, $user): array + { + return [ + 'message' => trim($message), + 'user' => trim($user), + 'address' => trim($address), + 'caller' => getLastCaller(4) + ]; + } + + /** + * @param Container $dic + * + * @throws DependencyException + * @throws NotFoundException + */ + protected function initialize(Container $dic) + { + $this->language = $dic->get(Language::class); + $this->request = $dic->get(Request::class); + + $configEvents = $this->config->getConfigData()->getLogEvents(); + + if (empty($configEvents)) { + $this->events = $this->parseEventsToRegex(LogInterface::EVENTS_FIXED); + } else { + $this->events = $this->parseEventsToRegex(array_merge($configEvents, LogInterface::EVENTS_FIXED)); + } + + $this->logger = $dic->get(Logger::class); + } +} \ No newline at end of file diff --git a/lib/SP/Providers/Log/RemoteSyslogHandler.php b/lib/SP/Providers/Log/RemoteSyslogHandler.php index d30718d5..3bbf145a 100644 --- a/lib/SP/Providers/Log/RemoteSyslogHandler.php +++ b/lib/SP/Providers/Log/RemoteSyslogHandler.php @@ -27,16 +27,10 @@ namespace SP\Providers\Log; use DI\Container; use DI\DependencyException; use DI\NotFoundException; -use Exception; use Monolog\Handler\SyslogUdpHandler; use Monolog\Logger; use SP\Core\Events\Event; -use SP\Core\Events\EventReceiver; use SP\Core\Exceptions\InvalidClassException; -use SP\Core\Language; -use SP\Http\Request; -use SP\Providers\EventsTrait; -use SP\Providers\Provider; use SplSubject; /** @@ -44,28 +38,8 @@ use SplSubject; * * @package SP\Providers\Log */ -final class RemoteSyslogHandler extends Provider implements EventReceiver +final class RemoteSyslogHandler extends LoggerBase { - use EventsTrait; - - const MESSAGE_FORMAT = '%s;%s;%s'; - /** - * @var Request - */ - private $request; - /** - * @var string - */ - private $events; - /** - * @var Logger - */ - private $logger; - /** - * @var Language - */ - private $language; - /** * Devuelve los eventos que implementa el observador * @@ -104,36 +78,6 @@ final class RemoteSyslogHandler extends Provider implements EventReceiver $this->updateEvent('update', new Event($subject)); } - /** - * Evento de actualización - * - * @param string $eventType Nombre del evento - * @param Event $event Objeto del evento - * - * @throws InvalidClassException - */ - public function updateEvent($eventType, Event $event) - { - $this->language->setAppLocales(); - - if (($e = $event->getSource()) instanceof Exception) { - /** @var Exception $e */ - $this->logger->error( - sprintf(self::MESSAGE_FORMAT, - $eventType, - __($e->getMessage()), - $this->request->getClientAddress(true))); - } elseif (($eventMessage = $event->getEventMessage()) !== null) { - $this->logger->debug( - sprintf(self::MESSAGE_FORMAT, - $eventType, - $eventMessage->composeText(' '), - $this->request->getClientAddress(true))); - } - - $this->language->unsetAppLocales(); - } - /** * @param Container $dic * @@ -142,29 +86,21 @@ final class RemoteSyslogHandler extends Provider implements EventReceiver */ protected function initialize(Container $dic) { - $this->language = $dic->get(Language::class); - $this->request = $dic->get(Request::class); + parent::initialize($dic); $configData = $this->config->getConfigData(); - $this->logger = $dic->get(Logger::class) - ->pushHandler( - new SyslogUdpHandler( - $configData->getSyslogServer(), - $configData->getSyslogPort(), - LOG_USER, - Logger::DEBUG, - true, - 'syspass' - ) - ); - - $configEvents = $configData->getLogEvents(); - - if (empty($configEvents)) { - $this->events = $this->parseEventsToRegex(LogInterface::EVENTS_FIXED); - } else { - $this->events = $this->parseEventsToRegex(array_merge($configEvents, LogInterface::EVENTS_FIXED)); - } + $this->logger->pushHandler( + new SyslogUdpHandler( + $configData->getSyslogServer(), + $configData->getSyslogPort(), + LOG_USER, + Logger::DEBUG, + true, + 'syspass' + ) + ); } + + } \ No newline at end of file diff --git a/lib/SP/Providers/Log/SyslogHandler.php b/lib/SP/Providers/Log/SyslogHandler.php index af32a0be..00d66f12 100644 --- a/lib/SP/Providers/Log/SyslogHandler.php +++ b/lib/SP/Providers/Log/SyslogHandler.php @@ -27,15 +27,9 @@ namespace SP\Providers\Log; use DI\Container; use DI\DependencyException; use DI\NotFoundException; -use Exception; -use Monolog\Logger; +use Monolog\Handler\SyslogHandler as MSyslogHandler; use SP\Core\Events\Event; -use SP\Core\Events\EventReceiver; use SP\Core\Exceptions\InvalidClassException; -use SP\Core\Language; -use SP\Http\Request; -use SP\Providers\EventsTrait; -use SP\Providers\Provider; use SplSubject; /** @@ -43,28 +37,8 @@ use SplSubject; * * @package SP\Providers\Log */ -final class SyslogHandler extends Provider implements EventReceiver +final class SyslogHandler extends LoggerBase { - use EventsTrait; - - const MESSAGE_FORMAT = '%s;%s;%s'; - /** - * @var Request - */ - private $request; - /** - * @var string - */ - private $events; - /** - * @var Logger - */ - private $logger; - /** - * @var Language - */ - private $language; - /** * Devuelve los eventos que implementa el observador * @@ -103,36 +77,6 @@ final class SyslogHandler extends Provider implements EventReceiver $this->updateEvent('update', new Event($subject)); } - /** - * Evento de actualización - * - * @param string $eventType Nombre del evento - * @param Event $event Objeto del evento - * - * @throws InvalidClassException - */ - public function updateEvent($eventType, Event $event) - { - $this->language->setAppLocales(); - - if (($e = $event->getSource()) instanceof Exception) { - /** @var Exception $e */ - $this->logger->error( - sprintf(self::MESSAGE_FORMAT, - $eventType, - __($e->getMessage()), - $this->request->getClientAddress(true))); - } elseif (($eventMessage = $event->getEventMessage()) !== null) { - $this->logger->debug( - sprintf(self::MESSAGE_FORMAT, - $eventType, - $eventMessage->composeText(' '), - $this->request->getClientAddress(true))); - } - - $this->language->unsetAppLocales(); - } - /** * @param Container $dic * @@ -141,17 +85,8 @@ final class SyslogHandler extends Provider implements EventReceiver */ protected function initialize(Container $dic) { - $this->language = $dic->get(Language::class); - $this->logger = $dic->get(Logger::class) - ->pushHandler(new \Monolog\Handler\SyslogHandler('syspass')); - $this->request = $dic->get(Request::class); + parent::initialize($dic); - $configEvents = $this->config->getConfigData()->getLogEvents(); - - if (empty($configEvents)) { - $this->events = $this->parseEventsToRegex(LogInterface::EVENTS_FIXED); - } else { - $this->events = $this->parseEventsToRegex(array_merge($configEvents, LogInterface::EVENTS_FIXED)); - } + $this->logger->pushHandler(new MSyslogHandler('syspass')); } } \ No newline at end of file diff --git a/lib/SP/Util/Checks.php b/lib/SP/Util/Checks.php index b4566b4b..da696bc5 100644 --- a/lib/SP/Util/Checks.php +++ b/lib/SP/Util/Checks.php @@ -48,6 +48,6 @@ final class Checks */ public static function checkPhpVersion() { - return version_compare(PHP_VERSION, '7.0', '>=') && version_compare(PHP_VERSION, '7.3', '<'); + return version_compare(PHP_VERSION, '7.0', '>=') && version_compare(PHP_VERSION, '7.3', '<='); } }