如何将Python stdout(或记录)流式传输到Redis连接?
我需要长时间运行以实时捕获日志。等待作业完成以获取日志是不可行的,以防万一失败,需要记录发生的情况。
我设法将日志输出捕获到StringIO缓冲区中的stdout上,该文件可以在长时间运行的作业完成后读取。
我不知道是如何在工作仍在运行时如何使该缓冲区与Redis客户端实时交互。
答案 0 :(得分:1)
我知道了:
from io import StringIO
class RedisHandler(StringIO):
def __init__(self, key, redis_client):
"""
Create a new StringIO interface for the given key and redis_client.
"""
StringIO.__init__(self)
self.key = key
self.redis_client = redis_client
def write(self, record):
"""
Publish record to redis logging list
"""
self.redis_client.lpush(self.key, record)
在主脚本中,我将stdout + stderr重定向到RedisHandler实例。 Redis充当StringIO的端点,并将日志输出中的每一行添加到列表中。