반응형

서비스를 개발하다보면 로깅이 필수입니다. 그러나 로깅또한 로그서버와 통신을 하므로 지연이 있습니다.

단일 스레드에서 로깅까지 진행하게 된다면 서비스는 상당히 느리겠죠.

따라서 로깅은 queue thread를 이용해봅니다.

class logThread(thread):
    def __init__(self):
        Thread.__init__(self)
        self.log_queue = Queue()

    def run(self):
        new_logger = logging.getLogger('log')
        new_logger.setLevel(logging.DEBUG)

        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(logging.DEBUG)

        gelf_udp_handler = graypy.GELFUDPHandler(config.GRAYLOG_HTTP_ADDR, config.GRAYLOG_PORT)

        new_logger.addHandler(gelf_udp_handler)

        while True:
            try:
                message = self.log_queue.get()
                if message is None:
                    continue
                new_logger.debug(message)
            except queue.Empty:
                pass
            except Exception as e:
                pass

    def queue_put(self, data):
        self.log_queue.put(data)

     def queue_get(self):
         return self.log_queue.get()

queue_put(data)의 data에 로그를 넣으면 그레이 로그로 전송이 되는 구조입니다.

반응형

+ Recent posts