From 004593060d5867e6a93b795cd91c75538ecfb1b4 Mon Sep 17 00:00:00 2001 From: Eugnee <77396838+Eugnee@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:32:10 +0200 Subject: [PATCH] redis manager, verbose error logging Sometimes it's very useful to see exact error from redis in logs --- src/socketio/async_redis_manager.py | 20 +++++++++++++------- src/socketio/redis_manager.py | 17 ++++++++++++----- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/socketio/async_redis_manager.py b/src/socketio/async_redis_manager.py index 92109a21..41ce2cea 100644 --- a/src/socketio/async_redis_manager.py +++ b/src/socketio/async_redis_manager.py @@ -78,14 +78,19 @@ async def _publish(self, data): self._redis_connect() return await self.redis.publish( self.channel, pickle.dumps(data)) - except RedisError: + except RedisError as exc: if retry: - self._get_logger().error('Cannot publish to redis... ' - 'retrying') + self._get_logger().error( + 'Cannot publish to redis... ' + 'retrying', + extra={"redis_exception": str(exc)}) retry = False else: - self._get_logger().error('Cannot publish to redis... ' - 'giving up') + self._get_logger().error( + 'Cannot publish to redis... ' + 'giving up', + extra={"redis_exception": str(exc)}) + break async def _redis_listen_with_retries(self): @@ -99,10 +104,11 @@ async def _redis_listen_with_retries(self): retry_sleep = 1 async for message in self.pubsub.listen(): yield message - except RedisError: + except RedisError as exc: self._get_logger().error('Cannot receive from redis... ' 'retrying in ' - '{} secs'.format(retry_sleep)) + '{} secs'.format(retry_sleep), + extra={"redis_exception": str(exc)}) connect = True await asyncio.sleep(retry_sleep) retry_sleep *= 2 diff --git a/src/socketio/redis_manager.py b/src/socketio/redis_manager.py index c4407dfe..73758fce 100644 --- a/src/socketio/redis_manager.py +++ b/src/socketio/redis_manager.py @@ -115,12 +115,18 @@ def _publish(self, data): if not retry: self._redis_connect() return self.redis.publish(self.channel, pickle.dumps(data)) - except redis.exceptions.RedisError: + except redis.exceptions.RedisError as exc: if retry: - logger.error('Cannot publish to redis... retrying') + logger.error( + 'Cannot publish to redis... retrying', + extra={"redis_exception": str(exc)} + ) retry = False else: - logger.error('Cannot publish to redis... giving up') + logger.error( + 'Cannot publish to redis... giving up', + extra={"redis_exception": str(exc)} + ) break def _redis_listen_with_retries(self): @@ -133,9 +139,10 @@ def _redis_listen_with_retries(self): self.pubsub.subscribe(self.channel) retry_sleep = 1 yield from self.pubsub.listen() - except redis.exceptions.RedisError: + except redis.exceptions.RedisError as exc: logger.error('Cannot receive from redis... ' - 'retrying in {} secs'.format(retry_sleep)) + 'retrying in {} secs'.format(retry_sleep), + extra={"redis_exception": str(exc)}) connect = True time.sleep(retry_sleep) retry_sleep *= 2