A log handler for the Python logging module, emitting all logs to specific Redis channels
Project description
redis_log_handler
Handler for the standard logging
module which puts logs through to Redis.
How to use
You can either publish your logs to a channel, rpush
them onto a key with an optional ttl
or implement the desired behaviour by deriving from the base class.
To add a handler to the python logger is very simple:
import logging
from redis_log_handler import RedisKeyHandler
example_handler = RedisKeyHandler('example_key') # Default parameters for Redis connection are used
logger = logging.getLogger() # No name gives you the root logger
logger.setLevel("WARNING")
logger.addHandler(example_handler)
logger.warning("This will rpush this message to the 'example_key' in Redis.")
Configuring Redis Connection
By default each handler will create a StrictRedis
instance, passing on each argument from their __init(**kwargs)
to the StrictRedis instantiation.
This means you can configure the connection as specific as you'd like, but every argument needs to have its keyword ((host=localhost)
instead of (localhost)
.
All available configuration options are available in te python-redis documentation.
handler = RedisKeyHandler("key", host="localhost", port=6379, password=None)
connection_pool = redis.ConnectionPool(host="localhost")
handler = RedisKeyHandler("key", connection_pool=connection_pool)
1. RedisChannelHandler
This opens a connection to a redis channel, allowing subscribers to pickup new messages in realtime. Every message triggered by the logging instance, will get published to the specified channel.
handler = RedisChannelHandler("channelname")
2. RedisKeyHandler
This creates/pushes onto the provided key, whatever message the logging instance will emit.
By default every message will be sent via rpush
, so that when the list is retrieved using lrange $key 0 -1
, all messages are returned in the order they were sent.
Optionally a ttl
(time to live) can be provided which will be a counter that will be set each time a message is sent, essentially refreshing the duration of the time to live for this key.
handler = RedisKeyHandler("some_key_name", ttl=60)
3. Custom Redis Handler
We also provide the ability to write custom emit functions, which get picked up by the logging instance, by inheriting the Base class. If none of the provided Redis implementations rock you boat, simply inherit the Base class and overwrite the emit() method.
In the following example we will write an example of a CustomRedisHandler which overwrites the value of the key it already exists.
class CustomRedisHandler(RedisBaseHandler):
def __init__(self, key: str, **kwargs: Any):
super().__init__(**kwargs)
self.key = key
def emit(self, message: logging.LogRecord):
self.redis_client.set(self.key, str(message))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for redis-log-handler-0.0.1.dev30.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab3505f441061a61721c12c8be657b85abc0a8713a1b7006c60a8cea679c413d |
|
MD5 | 652ec9590d25d0349918a6d35b3034b9 |
|
BLAKE2b-256 | b5162a4ba475c7f943ccc95f80459578e6a7f42e9a3081fcd3821ce2b0e207c3 |
Hashes for redis_log_handler-0.0.1.dev30-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d5b9e83e1a7858577b312e4dbc5af61ee766f0f1aa3b93590438d246f59de5a |
|
MD5 | 71eaaabc7e8fdf76972a5b013bca5ff3 |
|
BLAKE2b-256 | 78ee5d96d391d9e03efca2b1da4b46031686a69d4a637bbb225aa6a6ddcecb29 |