반응형
서비스를 개발하다보면 로깅이 필수입니다. 그러나 로깅또한 로그서버와 통신을 하므로 지연이 있습니다.
단일 스레드에서 로깅까지 진행하게 된다면 서비스는 상당히 느리겠죠.
따라서 로깅은 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에 로그를 넣으면 그레이 로그로 전송이 되는 구조입니다.
반응형
'Python' 카테고리의 다른 글
기본적인 베이스 코딩 구조(Class 개념 - 붕어빵 비유) (0) | 2022.02.03 |
---|---|
exception print하기 (0) | 2022.01.26 |
pip install opencv-python 에러 (0) | 2021.07.13 |
[opencv] ImportError: libGL.so.1: cannot open shared object file: No such file or directory (0) | 2021.03.29 |
python 폴더 내 파일 리스트 만들기 + 정렬(natsort) (0) | 2021.03.26 |