-
[Django] 로그 설정하는 법Django 2024. 1. 10. 09:13728x90
대략적인 방법은 이렇다.
- 로그 관련 파일을 만든다.
- 로그를 만들고 싶은 파일로 들어가 해당 파일을 임포트한다
- Logging.{출력하고 싶은 로그 레벨}(들어가고자하는 내용)을 집어넣는다
# log_setter.py Import os Import time Import logging Import logging.handlers From logging.handlers import TimedRotatingFileHandler Class RetimedRotatingFileHandler(TimedRotatingFileHandler) def __init__(self, filename, when=‘h’, interval = 1, backUpCount=0 , encoding=None, delay=False, utc=False): // 로그파일 초기 설정 TimedRotatingFileHandler.__init__(self, filename, when, interval, backUpCount, encoding, delay, utc) def doRollover(self): // 로그 파일 변경에 대한 함수 if self.stream: self.stream.close() self.stream = None current_time = int(time.time()) dst_now = time.lacaltime(current_time)[-1] t = self.rolloverAt - self.interval if self.utc: ‘ time_tuple = time.gmtime(t) else: time_tuple = time.loccaltime(t) dst_then = time_tuple[-1] if dst_now != dst_then: if dst_now: addend = 3600 else: addend = - 3600 Dfn = self.baseFilename + “.” + time.strftime(self.suffix, time_tuple) if not os.path.exists(dfn) and os.path.exists(self.baseFilename) os.rename(self.baseFilename, dfn) if self.backupCount > 0: For s in self.getFilesToDelete(): os.remove(s) if not self.delay: self.mode = “a” self.stream = self._open() new_rollover_at = self.computeRollover(current_time) while new_rollover_at <= current_time: new_rollover_at = new_rollover_at + self.interval if (self.when == “MIDNIGHT” or self.when.startswith(“W”)) and not self.utc: dst_at_rollover = time.localtime(new_rollover_at)[-1] if dst_now != dst_at_rollover: if not dst_now: addend = -3600 else: addend = 3600 new_rollover_at += addend self.rolloverAt = new_rollover_at def getLogger(name=None): logger = logging.getLogger(name) logger.setLevel(logging.INFO) // log format 지정 formatter = logging.Formatter(“%(asctime)s - [%(levelname)s] - “[%(name)s:%(filename)s:%(lineno)d] - %(message)s”) // log 파일에 기록 console = logging.StreamHandler() timedfilehandler_info = ReTimedRotatingFileHandler( filename = “./logs/{name}_info.log”.format(name=name), when=“midnight”, interval=1, encoding=“uff-8”, backupCount=1095) timedfilehandler_error = ReTimedRotatingFileHandler( filename=“./logs/{name}_error.log”.format(name=name), when=“midnight”, interval=1, encoding=“utf-8”, backupCount=1095) timedfilehandler_info.setFormatter(formatter) timedfilehandler_error.setFormatter(formatter) //level 설정 console.setLevel(logging.INFO) timedfilehandler_info.setLevel(logging.INFO) timedfilehandler_error.setLevel(logging.ERROR) //format console.setFormatter(formatter) timedfilehandler_info.setFormatter(formatter) timedfilehandler_error.setFormatter(formatter) // handler 추가 if not logger.hasHandlers(): logger.addHandler(console) logger.addHandler(timedfilehandler_info) logger.addHandler(timedfilehandler_error) return logger
logging 모듈의 handler.TimedRotatingFileHandler를 불러와 자신의 상황에 맞게 출력하고자 하는 로그 메시지를 작성하면 된다.
위 코드를 천천히 읽어봐도 알겠지만, TimedRotatingFileHandler는 일정 시간 주기에 맞춰서 로그 파일을 저장하고 새로 만드는 핸들러라고 보면된다.
만들어 놓은 다음에 로그 메시지를 남기고자 하는 파일에
# xxx.py import log_setter logger = log_setter.getLogger("프로젝트명(혹은 짓고 싶은 이름)") # 남기고 싶은 곳에 logger.{로그 레벨}(출력하고자 하는 메시지) logger.INFO("데이터가 DB에 적재되었습니다") logger.CRITICAL("시스템에 치명적인 에러가 발생하였습니다")
을 설정하여 사용하면 된다.
728x90'Django' 카테고리의 다른 글
[Django] Middleware (0) 2024.02.02 [Django] Django Throttling (1) 2024.02.02 [Django] CHAR 적용하기 (1) 2024.01.02 [Django] Mysql-client 설치 오류 (0) 2023.11.12 Django Signals (1) 2023.11.12