Потоковая передача из Python logging / stdout в соединение redis - PullRequest
0 голосов
/ 19 ноября 2018

Как я могу передать поток Python stdout (или ведение журнала) на соединение с Redis?

Существует длительное задание, для которого мне нужно захватывать журналы в реальном времени.Невозможно дождаться завершения задания, чтобы получить журналы, в случае сбоя должна быть запись о том, что произошло.

Мне удалось записать выходные данные журнала в stdout в буфере StringIO, который может бытьчитать, когда долгосрочное задание завершено.

Я не могу понять, как заставить этот буфер взаимодействовать с клиентом Redis в реальном времени, пока задание еще выполняется.

1 Ответ

0 голосов
/ 19 ноября 2018

Я понял это:

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 и добавляет каждую строку из вывода журнала в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...