X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFactory%2FLoggerFactory.php;h=444a98cde5c48300b1e15df77037ac8d1991da70;hb=8eba329111e832d7efdacf4f6a6fa85b0f7abbf3;hp=81c15bdb5bd4d311bdd3da6ae7fe95f0f5ebb138;hpb=50b7d95b2a819d589298dd07649d446fd400eae1;p=friendica.git diff --git a/src/Factory/LoggerFactory.php b/src/Factory/LoggerFactory.php index 81c15bdb5b..444a98cde5 100644 --- a/src/Factory/LoggerFactory.php +++ b/src/Factory/LoggerFactory.php @@ -5,9 +5,13 @@ namespace Friendica\Factory; use Friendica\Core\Config\Configuration; use Friendica\Core\Logger; use Friendica\Network\HTTPException\InternalServerErrorException; -use Friendica\Util\Logger\FriendicaDevelopHandler; -use Friendica\Util\Logger\FriendicaIntrospectionProcessor; -use Friendica\Util\Logger\WorkerLogger; +use Friendica\Util\Introspection; +use Friendica\Util\Logger\Monolog\DevelopHandler; +use Friendica\Util\Logger\Monolog\IntrospectionProcessor; +use Friendica\Util\Logger\ProfilerLogger; +use Friendica\Util\Logger\StreamLogger; +use Friendica\Util\Logger\SyslogLogger; +use Friendica\Util\Logger\VoidLogger; use Friendica\Util\Profiler; use Monolog; use Psr\Log\LoggerInterface; @@ -27,7 +31,7 @@ class LoggerFactory private static $ignoreClassList = [ Logger::class, Profiler::class, - WorkerLogger::class + 'Friendica\\Util\\Logger', ]; /** @@ -35,29 +39,57 @@ class LoggerFactory * * @param string $channel The channel of the logger instance * @param Configuration $config The config + * @param Profiler $profiler The profiler of the app * * @return LoggerInterface The PSR-3 compliant logger instance + * + * @throws \Exception + * @throws InternalServerErrorException */ - public static function create($channel, Configuration $config) + public static function create($channel, Configuration $config, Profiler $profiler) { - $loggerTimeZone = new \DateTimeZone('UTC'); - Monolog\Logger::setTimezone($loggerTimeZone); + if (empty($config->get('system', 'debugging', false))) { + $logger = new VoidLogger(); + Logger::init($logger); + return $logger; + } - $logger = new Monolog\Logger($channel); - $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); - $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); - $logger->pushProcessor(new Monolog\Processor\UidProcessor()); - $logger->pushProcessor(new FriendicaIntrospectionProcessor(LogLevel::DEBUG, self::$ignoreClassList)); + $introspection = new Introspection(self::$ignoreClassList); + $level = $config->get('system', 'loglevel'); + $loglevel = self::mapLegacyConfigDebugLevel((string)$level); - $debugging = $config->get('system', 'debugging'); - $stream = $config->get('system', 'logfile'); - $level = $config->get('system', 'loglevel'); + switch ($config->get('system', 'logger_config', 'stream')) { + case 'monolog': + $loggerTimeZone = new \DateTimeZone('UTC'); + Monolog\Logger::setTimezone($loggerTimeZone); - if ($debugging) { - $loglevel = self::mapLegacyConfigDebugLevel((string)$level); - static::addStreamHandler($logger, $stream, $loglevel); - } else { - static::addVoidHandler($logger); + $logger = new Monolog\Logger($channel); + $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); + $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); + $logger->pushProcessor(new Monolog\Processor\UidProcessor()); + $logger->pushProcessor(new IntrospectionProcessor($introspection, LogLevel::DEBUG)); + + $stream = $config->get('system', 'logfile'); + + static::addStreamHandler($logger, $stream, $loglevel); + break; + + case 'syslog': + $logger = new SyslogLogger($channel, $introspection, $loglevel); + break; + + case 'stream': + default: + $stream = $config->get('system', 'logfile'); + $logger = new StreamLogger($channel, $stream, $introspection, $loglevel); + break; + } + + $profiling = $config->get('system', 'profiling', false); + + // In case profiling is enabled, wrap the ProfilerLogger around the current logger + if (isset($profiling) && $profiling !== false) { + $logger = new ProfilerLogger($logger, $profiler); } Logger::init($logger); @@ -75,31 +107,63 @@ class LoggerFactory * * @param string $channel The channel of the logger instance * @param Configuration $config The config + * @param Profiler $profiler The profiler of the app * * @return LoggerInterface The PSR-3 compliant logger instance + * + * @throws InternalServerErrorException + * @throws \Exception */ - public static function createDev($channel, Configuration $config) + public static function createDev($channel, Configuration $config, Profiler $profiler) { $debugging = $config->get('system', 'debugging'); $stream = $config->get('system', 'dlogfile'); $developerIp = $config->get('system', 'dlogip'); if (!isset($developerIp) || !$debugging) { - return null; + $logger = new VoidLogger(); + Logger::setDevLogger($logger); + return $logger; } $loggerTimeZone = new \DateTimeZone('UTC'); Monolog\Logger::setTimezone($loggerTimeZone); - $logger = new Monolog\Logger($channel); - $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); - $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); - $logger->pushProcessor(new Monolog\Processor\UidProcessor()); - $logger->pushProcessor(new FriendicaIntrospectionProcessor(LogLevel::DEBUG, self::$ignoreClassList)); + $introspection = new Introspection(self::$ignoreClassList); + + switch ($config->get('system', 'logger_config', 'stream')) { + + case 'monolog': + $loggerTimeZone = new \DateTimeZone('UTC'); + Monolog\Logger::setTimezone($loggerTimeZone); + + $logger = new Monolog\Logger($channel); + $logger->pushProcessor(new Monolog\Processor\PsrLogMessageProcessor()); + $logger->pushProcessor(new Monolog\Processor\ProcessIdProcessor()); + $logger->pushProcessor(new Monolog\Processor\UidProcessor()); + $logger->pushProcessor(new IntrospectionProcessor($introspection, LogLevel::DEBUG)); + + $logger->pushHandler(new DevelopHandler($developerIp)); - $logger->pushHandler(new FriendicaDevelopHandler($developerIp)); + static::addStreamHandler($logger, $stream, LogLevel::DEBUG); + break; - static::addStreamHandler($logger, $stream, LogLevel::DEBUG); + case 'syslog': + $logger = new SyslogLogger($channel, $introspection, LogLevel::DEBUG); + break; + + case 'stream': + default: + $logger = new StreamLogger($channel, $stream, $introspection, LogLevel::DEBUG); + break; + } + + $profiling = $config->get('system', 'profiling', false); + + // In case profiling is enabled, wrap the ProfilerLogger around the current logger + if (isset($profiling) && $profiling !== false) { + $logger = new ProfilerLogger($logger, $profiler); + } Logger::setDevLogger($logger);