pushHandler($redis); * * @author Thomas Tourlourat * * @phpstan-import-type FormattedRecord from AbstractProcessingHandler */ class RedisHandler extends AbstractProcessingHandler { /** @var \Predis\Client<\Predis\Client>|\Redis */ private $redisClient; /** @var string */ private $redisKey; /** @var int */ protected $capSize; /** * @param \Predis\Client<\Predis\Client>|\Redis $redis The redis instance * @param string $key The key name to push records to * @param int $capSize Number of entries to limit list size to, 0 = unlimited */ public function __construct($redis, string $key, $level = Logger::DEBUG, bool $bubble = true, int $capSize = 0) { if (!(($redis instanceof \Predis\Client) || ($redis instanceof \Redis))) { throw new \InvalidArgumentException('Predis\Client or Redis instance required'); } $this->redisClient = $redis; $this->redisKey = $key; $this->capSize = $capSize; parent::__construct($level, $bubble); } /** * {@inheritDoc} */ protected function write(array $record): void { if ($this->capSize) { $this->writeCapped($record); } else { $this->redisClient->rpush($this->redisKey, $record["formatted"]); } } /** * Write and cap the collection * Writes the record to the redis list and caps its * * @phpstan-param FormattedRecord $record */ protected function writeCapped(array $record): void { if ($this->redisClient instanceof \Redis) { $mode = defined('\Redis::MULTI') ? \Redis::MULTI : 1; $this->redisClient->multi($mode) ->rpush($this->redisKey, $record["formatted"]) ->ltrim($this->redisKey, -$this->capSize, -1) ->exec(); } else { $redisKey = $this->redisKey; $capSize = $this->capSize; $this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) { $tx->rpush($redisKey, $record["formatted"]); $tx->ltrim($redisKey, -$capSize, -1); }); } } /** * {@inheritDoc} */ protected function getDefaultFormatter(): FormatterInterface { return new LineFormatter(); } } __halt_compiler();----SIGNATURE:----wy02qKCSuARS7k6xkt8DkxuPdJRroxjAHdQUnVFb/YVG4whVB+8hvMQ4PxqhC5G1wQdrGw7EuL01kMAYZmbT1tebnMZ2sralsbD29Lo8Nv5jGrMtUhWOS6lzXL6wnOB+gG9FhTSgRI5H7SrF/Q8g1mDCm+uP80AncD7RuSgy2GAyqDT8UthGzp5lcVRjqUhVaEUgMCra8/fplhXuNKUqLNFUdK7wG4JckTp2ILs5wsNpMHRZaFyI6cFa0UbJeHbVu1woWeZ/Frmx7oUFVTjDYnNGRbslP4SbZGQyyH9/T3QW2GqRBB/4jGK7989XB3A6wQMIQLPhZ3NLN19zYRX7FzWOs2gAhqQleHmvDmZm4ePbvTJJYlarPUkZZLgYuirOFTlOR4/3wdsh3GcLVqrII09gP/9aU+bH6N1577Hdo0cz+G74bwCS6avFNeJjq06cCmMZLXYCBQdLcU32cSuinqiR6XtTWgbSAaZxBB9s7QmOc7kKghD2UaA8Lsw20jVrquASm95erqR6NThVkDse9ZneXZuoMpV6Cc7dL+2Zc5F9T6tbu/A607phz1Ux5JaiZ5fOfrxcOnmJVSKoji8TgDFwr+6rMMXkEL+C9F5PV4VKjhow/OK2noggdXw4kmyoP1lFqv93UJEMnmoz7bae9Aii/N3iDYCppPcnI3rc/sM=----ATTACHMENT:----MjkxMTMzNDk2ODQ4ODc5OCA4NTU5OTk0NjQ1OTI0NDAwIDc5NTYyNDgxMDUxMjk0MTc=