queue logger

cooolr 于 2022-06-16 发布
import sys
import queue
import logging
from logging.handlers import QueueHandler
from logging.handlers import QueueListener

log_queue = queue.Queue(-1)

def get_queue_logger():
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    queue_handler = QueueHandler(log_queue)
    logger.addHandler(queue_handler)
    return logger

def start_queue_listener():
    formatter = logging.Formatter(
        '%(thread)d %(asctime)s %(filename)s[line:%(lineno)d] %(funcName)s %(levelname)s %(message)s')
    stdout_handler = logging.StreamHandler(sys.__stdout__)
    stdout_handler.level = logging.INFO
    stdout_handler.formatter = formatter
    listener = QueueListener(log_queue, stdout_handler)
    listener.start()

logger = get_queue_logger()
start_queue_listener()

if __name__ == '__main__':
    logger.info("example")