从Python日志记录/标准输出流到Redis连接

时间:2018-11-18 22:49:05

标签: python logging redis

如何将Python stdout(或记录)流式传输到Redis连接?

我需要长时间运行以实时捕获日志。等待作业完成以获取日志是不可行的,以防万一失败,需要记录发生的情况。

我设法将日志输出捕获到StringIO缓冲区中的stdout上,该文件可以在长时间运行的作业完成后读取。

我不知道是如何在工作仍在运行时如何使该缓冲区与Redis客户端实时交互。

1 个答案:

答案 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的端点,并将日志输出中的每一行添加到列表中。