Skip to content

Instantly share code, notes, and snippets.

@Suor
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Suor/54dc5e423e627f4b1f73 to your computer and use it in GitHub Desktop.
Save Suor/54dc5e423e627f4b1f73 to your computer and use it in GitHub Desktop.
A decorator/context manager to route logging to redis
# Usage
log_key = 'smth:%d:log' % some_id
with extra_logging_handler('name', RedisHandler(key=log_key)):
# Do your thing
# ...
# Implementation
import logging
from contextlib import contextmanager
import redis
redis_client = redis.StrictRedis(**redis_conf)
@contextmanager
def extra_logging_handler(name, handler):
logger = logging.getLogger(name)
logger.addHandler(handler)
try:
yield
except Exception as e:
logger.error(e, exc_info=True)
finally:
logger.removeHandler(handler)
class RedisHandler(logging.Handler):
def __init__(self, key):
super(RedisHandler, self).__init__()
self.key = key
def emit(self, record):
# NOTE: other option is saving json.dumps(record.__data__)
redis_client.rpush(self.key, self.format(record))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment