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:----gWX0zgt4glPjxaSPX841IMb+ZyIOnDsDOsOi6eE4DyfYTdR8y/lCNgTyE7u6UYlQcgyagLwJyEGVR/qHTRo/mqjB0HBWA3pjLcuncoetOlWYn2kY3Hq0r4sF3grszwqQJfugXhZU0mb8rcLbAduAL1ur9iXZBk2IYqcOt6c4KyGGSHk1mFYu0n9Z5vfMbZczhP1kLA9hZWqvYEWZFI2mS67uoPz50bQcj9+Itm1OEuYUy5YfgfDuOuXGD4uznPecLAM6+d/8ceVcthfwh/R3mYPsPZ/IwU7hpKlPrQi3GM9+PG6xQ3hCWvaNgTDHWCmC64l7tBYm9CUExQzI60VolQqIGKKhQ/zwzkRpjJNPnlqdbBguL6fH/SM7IafKOTHpEEa1wRicjxzDYIPRAlhOASX68Hb64XTz2zYRgsYfmsg2sVFCFl9UnoS2rF1LKnba45Adc5sEuh3sZxvQhso6JsOwpQNzkipG/4X14L2xDrCIhlvN9iLGCjCwTOxPYRM4O2Z86Ny/1jR8vq7UFujrLxCEmrVIAluXMJC7fFx6tN7cd7m1kv2lyKB8ZPFcNwAW+hEK/55yv73aW7WyJGl63/3aWHmI7Md3vovhXWhhNjhshaES9FYWmlBGYVn2LPDfAhbU9NTf28TVeqUdR/ACurYPz4A38K0Cszf2Vu/WBXE=----ATTACHMENT:----MzYyMjgwODc5OTAxNTI1MiA2NTYwMDUwMjY2NjQzNDYzIDY1MDg5NzEzMjMxMTE4MTE=