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