51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
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!
|
|
''' |