O2Sound_ver2_final/backend/app/shared/logger.py

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!
'''