""" 로깅 설정 모듈 """ import logging import sys from pathlib import Path from typing import Optional # 로그 디렉토리 LOG_DIR = Path(__file__).parent.parent.parent / 'logs' LOG_DIR.mkdir(exist_ok=True) # 로그 포맷 LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' DATE_FORMAT = '%Y-%m-%d %H:%M:%S' def get_logger(name: str, level: int = logging.INFO) -> logging.Logger: """ 로거 인스턴스 생성 및 반환 Args: name: 로거 이름 (일반적으로 __name__ 사용) level: 로그 레벨 (기본값: INFO) Returns: 설정된 로거 인스턴스 """ logger = logging.getLogger(name) # 이미 핸들러가 설정되어 있으면 기존 로거 반환 if logger.handlers: return logger logger.setLevel(level) # 콘솔 핸들러 console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(level) console_formatter = logging.Formatter(LOG_FORMAT, datefmt=DATE_FORMAT) console_handler.setFormatter(console_formatter) logger.addHandler(console_handler) # 파일 핸들러 (애플리케이션 로그) file_handler = logging.FileHandler( LOG_DIR / 'app.log', encoding='utf-8' ) file_handler.setLevel(logging.DEBUG) file_formatter = logging.Formatter(LOG_FORMAT, datefmt=DATE_FORMAT) file_handler.setFormatter(file_formatter) logger.addHandler(file_handler) # 에러 전용 파일 핸들러 error_handler = logging.FileHandler( LOG_DIR / 'error.log', encoding='utf-8' ) error_handler.setLevel(logging.ERROR) error_handler.setFormatter(file_formatter) logger.addHandler(error_handler) return logger