. * */ namespace Friendica\Core\Logger\Factory; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hooks\Capabilities\ICanCreateInstances; use Friendica\Core\Logger\Capabilities\LogChannel; use Friendica\Core\Logger\Type\ProfilerLogger as ProfilerLoggerClass; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; use Throwable; /** * The logger factory for the core logging instances */ class Logger { /** @var string The channel */ protected $channel; public function __construct(string $channel = LogChannel::DEFAULT) { $this->channel = $channel; } public function create(ICanCreateInstances $createInstances, IManageConfigValues $config, Profiler $profiler): LoggerInterface { if (empty($config->get('system', 'debugging') ?? false)) { return new NullLogger(); } $name = $config->get('system', 'logger_config') ?? ''; try { /** @var LoggerInterface $logger */ $logger = $createInstances->create(LoggerInterface::class, $name, [$this->channel]); if ($config->get('system', 'profiling') ?? false) { return new ProfilerLoggerClass($logger, $profiler); } else { return $logger; } } catch (Throwable $e) { // No logger ... return new NullLogger(); } } }