일반 로그 뿐만 아니라 코드에서 exception이 발생할 때에도 로그를 남기고 싶을 때가 있다. 그럴 경우에는 아래 코드와 같이 남기면 된다.
import os
import sys
import logging
import traceback
from logging.handlers import SysLogHandler
from constants import LOG_LEVEL
logger = logging.getLogger()
logger.setLevel(LOG_LEVEL)
syslog = SysLogHandler(address=(HOST, PORT))
hostname = os.environ.get('HOSTNAME', "")
log_format = hostname + " %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s"
formatter = logging.Formatter(log_format)
syslog.setFormatter(formatter)
syslog.setLevel(LOG_LEVEL)
logger.addHandler(syslog)
def handle_exception(type, value, tb):
logger.exception(value)
logger.exception("\n".join(traceback.format_tb(tb)))
sys.excepthook = handle_exception
sys.excepthook을 통해 예상치 못한 익셉션이 발생했을 때에는 handle_exception 함수를 호출하게 된다. handle_exception에는 stack trace를 로깅 시스템에 로그를 쏴주기때문에 의도와 같이 동작시킬 수 있다.
'python' 카테고리의 다른 글
전문가를 위한 파이썬 책 구매 (0) | 2022.07.21 |
---|---|
파이썬 기반의 멀티프로세싱 (0) | 2021.12.15 |
closure & decorator (0) | 2021.12.15 |
병렬처리 특성 비교, 그리고 파이썬 기반의 멀티쓰레딩 (0) | 2021.12.06 |
PEP 8 - 파이썬 코드 스타일 가이드 (0) | 2021.12.06 |