使用QueueHandler进行异步功能的Python日志记录

时间:2020-07-12 02:32:55

标签: python logging python-asyncio python-logging

我正在尝试为某些异步函数添加日志记录,这些函数用于套接字流传输,并且随时可能会有大量数据传入。最初我使用简单的日志记录,但是与收入流相比,写入日志文件太慢了,这会导致流问题。然后,我试图使用QueueHandler和QueueListener进行日志记录,以便写入日志文件不会阻塞流传输过程。

但是,当我尝试在链接herehere中使用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的日志记录用于异步功能的正确方法。

任何建议将不胜感激!

0 个答案:

没有答案