我正在尝试为某些异步函数添加日志记录,这些函数用于套接字流传输,并且随时可能会有大量数据传入。最初我使用简单的日志记录,但是与收入流相比,写入日志文件太慢了,这会导致流问题。然后,我试图使用QueueHandler和QueueListener进行日志记录,以便写入日志文件不会阻塞流传输过程。
但是,当我尝试在链接here和here中使用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的日志记录用于异步功能的正确方法。
任何建议将不胜感激!