Python ведение журнала с использованием QueueHandler для асинхронных c функций - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь добавить ведение журнала для некоторых асинхронных c функций, которые используются для потоковой передачи сокетов и могут иметь большой объем данных, поступающих в любой момент. Первоначально я использовал простое ведение журнала, но запись в файл журнала происходит слишком медленно по сравнению с потоковой передачей дохода, что вызывает проблемы при потоковой передаче. Затем я пытался использовать QueueHandler и QueueListener для ведения журнала, чтобы запись в файлы журнала не блокировала процесс потоковой передачи.

Однако, когда я попытался использовать QueueHandler, как в ссылках здесь и здесь , я не могу получить вывод журнала на терминал или в файл, был создан только пустой файл. Ниже мой код:

logger = None

async def my_func(data):
    process(data)
    logger.info(data)

if __name__ == '__main__':
    logger = logging.getLogger()
    log_queue = queue.Queue(-1)
    queue_handler = QueueHandler(log_queue)
    logger.addHandler(queue_handler)

    formatter = logging.Formatter('%(asctime)s - %(threadName)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S %Z')

    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    console_handler.setLevel(logging.INFO)

    file_handler = logging.FileHandler(log_path)
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.INFO)

    listener = QueueListener(log_queue, console_handler, file_handler)

    listener.start()

    # Calling async function
    ......

    listener.stop()

Мне интересно, правильно ли это использовать ведение журнала с помощью QueueHandler для функции asyn c.

Любое предложение будет очень признательно!

...