Log handler to forward logs to Redis.
An example porject using this module: sw-logs
Installation | Usage | Handler classes | Documentation |
---|
Installation with pip
:
pip install redis-logs
Setup log forwarding to a redis stream:
from rlh import RedisStreamLogHandler
# define your logger
logger = logging.getLogger('my_app')
# define the Redis log handler
handler = RedisStreamLogHandler()
# add the handler to the logger
logger.addHandler(handler)
After that, all the logs emitted with the logger will be forwarded to a Redis Stream; by default the logs are forwarded to a Redis instance running at localhost:6379
in a stream named logs
.
from rlh import RedisStreamLogHandler
# define your logger
logger = logging.getLogger('my_app')
# define the Redis log handler
handler = RedisStreamLogHandler(stream_name="custom_stream_name")
# add the handler to the logger
logger.addHandler(handler)
To use a custom Redis client, you can either define your own client with redis.Redis
and then pass it to the handler:
from redis import Redis
from rlh import RedisStreamLogHandler
# define a custom Redis client
client = Redis(host="redis", port=6380, db=1)
# define your logger
logger = logging.getLogger('my_app')
# define the Redis log handler with custom Redis client
handler = RedisStreamLogHandler(redis_client=client)
# add the handler to the logger
logger.addHandler(handler)
Or dirrectly call the handler constructor with your custom Redis settings:
from rlh import RedisStreamLogHandler
# define your logger
logger = logging.getLogger('my_app')
# define the Redis log handler with custom Redis client
handler = RedisStreamLogHandler(host="redis", port=6380, db=1)
# add the handler to the logger
logger.addHandler(handler)
By default the handler only saves the logs fieds msg
, levelname
and created
. You can however change this default behaviour by setting your own desired fields (see the full list of fields in logging documentation):
from rlh import RedisStreamLogHandler
# define your logger
logger = logging.getLogger('my_app')
# define the Redis log handler with custom fields
handler = RedisStreamLogHandler(fields=["msg", "name", "module", "levelno"])
# add the handler to the logger
logger.addHandler(handler)
Logs can also be saved in DB as pickle format:
from rlh import RedisStreamLogHandler
# define your logger
logger = logging.getLogger('my_app')
# define the Redis log handler with as_pkl set to True
handler = RedisStreamLogHandler(as_pkl=True)
# add the handler to the logger
logger.addHandler(handler)
Logs can also be saved in DB as their JSON representation:
from rlh import RedisStreamLogHandler
# define your logger
logger = logging.getLogger('my_app')
# define the Redis log handler with ad_json set to True
handler = RedisStreamLogHandler(as_json=True)
# add the handler to the logger
logger.addHandler(handler)
Currently rlh
implements two classes of handlers:
Handler used to forward logs to a Redis stream.
Handler used to publish logs to a Redis pub/sub channel.
⚠️ Before usingRedisPubSubLogHandler
, make sure to define at least one listener to the channel, otherwise the logs emitted will be lost