import logging import sys from logging.handlers import TimedRotatingFileHandler import os from datetime import datetime class CustomTimedRotatingFileHandler(TimedRotatingFileHandler): def __init__(self, base_log_path, when="midnight", interval=1, backupCount=7): self.base_log_path = base_log_path # 초기화 시점에 파일 경로를 명시적으로 설정 self.update_log_path() super().__init__(self.baseFilename, when=when, interval=interval, backupCount=backupCount) def update_log_path(self): current_time = datetime.now() log_directory = os.path.join( self.base_log_path, current_time.strftime("%Y"), current_time.strftime("%m") ) log_filename = current_time.strftime("%d_allscore.log") # 로그 파일 경로 설정 self.baseFilename = os.path.join(log_directory, log_filename) # 디렉토리가 없으면 생성 if not os.path.exists(log_directory): os.makedirs(log_directory) def emit(self, record): # 각 로그 기록 시점에서 경로를 다시 확인해 업데이트 self.update_log_path() super().emit(record) # 로거 설정 logger = logging.getLogger("allscore_logger") logger.setLevel(logging.DEBUG) # 핸들러 설정 (stdout으로 출력) stream_handler = logging.StreamHandler(sys.stdout) stream_handler.setLevel(logging.DEBUG) # 로그 포맷 설정 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') stream_handler.setFormatter(formatter) # 커스텀 파일 핸들러 설정 base_log_path = "/app/logs" file_handler = CustomTimedRotatingFileHandler(base_log_path=base_log_path, when="midnight", interval=1, backupCount=7) file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(formatter) # 핸들러를 로거에 추가 logger.addHandler(stream_handler) logger.addHandler(file_handler)