import logging import sys import os def setup_logger(name: str) -> logging.Logger: logger = logging.getLogger(name) # 이미 설정된 로거는 다시 설정하지 않음 if not logger.handlers: # 환경 변수에서 로그 레벨 가져오기 (기본값: INFO) log_level_name = os.environ.get('LOG_LEVEL', 'INFO') log_level = getattr(logging, log_level_name, logging.INFO) # 콘솔 핸들러 설정 console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(log_level) class CustomFormatter(logging.Formatter): def format(self, record): if len(record.getMessage()) > 30: self._style._fmt = '[%(asctime)s] [%(levelname)s] [%(name)s]\n%(message)s' else: self._style._fmt = '[%(asctime)s] [%(levelname)s] [%(name)s] - %(message)s' return super().format(record) formatter = CustomFormatter() console_handler.setFormatter(formatter) logger.addHandler(console_handler) logger.setLevel(log_level) # SQLAlchemy 로깅 레벨 설정 if name == "__main__": # SQLAlchemy의 과도한 로깅 제한 logging.getLogger('sqlalchemy.engine').setLevel(logging.WARNING) return logger ''' ####### 사용 방법 ####### from utils.logger import setup_logger logger = setup_logger(__name__) logger.info("Hello, World!") ####### 출력 형식 ####### [2025-05-13 12:00:00] [INFO] [__main__] - Hello, World! # 메시지가 긴 경우 [2025-05-13 12:00:00] [INFO] [__main__] Hello, World! '''